Chinaunix
标题:
csh下的逻辑与怎么写?
[打印本页]
作者:
icetown
时间:
2012-03-13 17:16
标题:
csh下的逻辑与怎么写?
本帖最后由 icetown 于 2012-03-14 10:30 编辑
想先判断一下aa变量是否声明,未声明则声明.
貌似csh跟c语言不大一样,c语言逻辑与前半部分判断为0,后半部分就不去判断了。
但csh好像不分前后,只要是逻辑与的,前后部分都要判断,所以才会出现Undefined variable的错误。
if ( $?aa &&
$aa=="YES"
) then
echo defined
set aa="hello"
else
echo un-defined
set aa=""
endif
报错aa: Undefined variable.
如果想实现我的预期,只能按下面的做了。有点麻烦,不想这样,但是不这样就报错,还有啥好招没?
if ( $?aa ) then
echo defined
if ( $aa=="YES") then
set aa="hello"
else
set aa=""
endif
else
echo un-defined
set aa=""
endif
作者:
zooyo
时间:
2012-03-13 19:54
提示:
作者被禁止或删除 内容自动屏蔽
作者:
yangkyo821
时间:
2012-03-14 00:46
${?aa} 如果aa有设定, 则为1,没有设定则值为0
作者:
icetown
时间:
2012-03-14 10:22
楼上说的对,$?aa确实是判断aa是否有定义的,有定义则为1,未定义则为0.
发帖时if语句漏了点东东,应该是还有个$aa=="YES"。
if ( $?aa &&
$aa=="YES"
) then
echo defined
set aa="hello"
else
echo un-defined
set aa=""
endif
脚本的逻辑与好像和c语言的不一样,c代码的是判断逻辑与的前半部分为0,则后面就不判断了,但是csh好像两者同时判断。
所以会出现错误打印,aa: Undefined variable.
作者:
yangkyo821
时间:
2012-03-14 11:45
回复
4#
icetown
并不是csh的逻辑and的判断方式与c不一样, 而是在shell解释器里面先进行变量替换之后再来执行if语句.
变量替换是将所有$开头的变量替换成本来值, 在这个时候就出现 "aa: Undefined variable."的错误而退出, if语句根本就没有执行.
作者:
icetown
时间:
2012-03-14 12:23
楼上说的好像很有道理,学习了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2