tcsh 中的 If-then-else 语法

If-then-else syntax in tcsh

我正在尝试在 tcsh(版本 6.12.00 (Astron) 2002-07-23)中编写一个简单的脚本,但我被 if-then-else 语法绊倒了。我对剧本写作很陌生。

此脚本有效:

#!/bin/tcsh -f
if (1) echo "I disagree"

然而,这个不是:

#!/bin/tcsh -f
if ( 1 ) then
  echo "I disagree"
else
  echo "I agree"
endif

一方面,这段代码在 运行 时回应了这两个语句。在我看来,它永远不应该看到其他人。另一方面,输出还穿插了三个“:找不到命令”的回声。

编辑添加:这里是逐字输出:

: Command not found.
I disagree
: Command not found.
I agree
: Command not found.

我知道标准建议是改用另一个 shell,但我真的不能这样做(新工作,新同事,其他人都使用 tcsh,希望我的脚本是便携)。

当我复制并粘贴您的脚本并将其 运行 到我的系统时,它正确地打印了 I disagree

当我将行结尾更改为 Windows 样式时,我得到:

: Command not found.
I disagree
: Command not found.
I agree
: Command not found.

因此,您的脚本很可能具有 Windows 样式的行结尾。修复行尾,它应该可以工作。 dos2unix 命令是一种方法(首先是 man dos2unix;与大多数 UNIX 文本处理命令不同,它会替换其输入文件。)

问题是 tcsh 无法将 ^M ('\r') 识别为行尾字符。它将行尾的 then^M 视为单个命令,并打印一条错误消息 then^M: Command not found。 ^M 使光标 return 到行首,其余消息覆盖 then.