if语句CSH中未修改变量

if语句CSH中未修改变量,csh,Csh,我有以下非常简单的代码: #!/usr/bin/env csh set status=0 if ( 0 == 0 ) then ls ./dummyDir set status=$? echo $status endif echo $status 问题是$status的最后一个回显是0,而第一个回显设置为exit code,即2? 为什么会这样?为什么在if语句中不修改状态。在bash中,与此相同的等价物也可以完美地工作。$status是$?的别名;因此它会被回声覆盖

我有以下非常简单的代码:

#!/usr/bin/env csh

set status=0
if ( 0 == 0 ) then
    ls ./dummyDir
    set status=$?
    echo $status
endif
echo $status
问题是$status的最后一个回显是0,而第一个回显设置为exit code,即2?
为什么会这样?为什么在if语句中不修改状态。在bash中,与此相同的等价物也可以完美地工作。

$status
$?
的别名;因此它会被回声覆盖。您需要使用不同的变量名:

set ls_status = 0
if ( 0 == 0 ) then
    ls ./dummyDir
    set ls_status = $?
    echo $ls_status
endif
echo $ls_status
产出:

ls: cannot access './dummyDir': No such file or directory
2
2

另一个不花时间使用csh编码的原因。这是一个简单的测试,除了将一个值保存到一个文件中,然后
source
(ing)
file
,我看不出任何方法可以解决您的问题。我没有csh可供试验,因此我认为我无法提供额外的想法。祝你好运如果您的工作要求您继续使用csh编程,那么请订购Anderson和Anderson的“C Shell指南”(或类似标题),它写得非常好,但不涉及
csh
的问题。或者向你的老板展示[csh被认为有害]().arg。它实际上更简单@Sheller
$status
只是
$?
的别名(反之亦然),因此它会被
echo
覆盖。这篇文章并不是关于csh的很多问题:-)谢谢大家。。。。我只是喜欢支持别人的老东西。老实说,我更喜欢ksh或bash。