【问题标题】:variable is not modified in if statement CSHif 语句 CSH 中未修改变量
【发布时间】:2020-11-12 17:57:21
【问题描述】:

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

#!/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 中与此相同的等价物完美运行。

【问题讨论】:

  • 另一个不用csh/-; 编码的理由.这是一个简单的测试,除了将值保存到文件然后source(ing)file 之外,我看不出解决你的问题。我没有要试验的 csh,所以我认为我无法提供额外的想法。祝你好运!
  • 如果你的工作需要你继续用csh编程,那就点Anderson and Anderson的“Guide to C Shell”(或类似的标题),写得很好,但不赘述csh的问题。或向你的老板展示 [csh-considered-harmful]()。
  • 实际上要简单得多@shellter; $status 只是$? 的别名(反之亦然),因此它会被echo 覆盖。这不是真的在 csh 的许多问题上 :-)
  • 谢谢大家......我只是迷上了支持别人的旧东西。老实说,我更喜欢 ksh 或 bash。

标签: csh


【解决方案1】:

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2015-08-17
    • 2020-05-11
    相关资源
    最近更新 更多