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