变量在 if 语句 CSH 中没有被修改

variable is not modified in if statement CSH

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

#!/usr/bin/env csh

set status=0
if ( 0 == 0 ) then
    ls ./dummyDir
    set status=$?
    echo $status
endif
echo $status

问题是 $status 的最后一个回显是 0 而第一个设置为退出代码是 2? 为什么会这样?为什么在 if 语句中不修改状态。 bash 中的相同等价物完全有效。

$status$? 的别名;所以它被 echo 覆盖了。您需要使用不同的变量名称:

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