【问题标题】:If-then-else syntax in tcshtcsh 中的 if-then-else 语法
【发布时间】:2017-09-29 01:38:09
【问题描述】:

我正在尝试在 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,希望我的脚本可移植)。

【问题讨论】:

  • 请更新您的问题以显示准确的(复制和粘贴的)错误消息。

标签: tcsh


【解决方案1】:

当我复制并粘贴您的脚本并在我的系统上运行它时,它会正确打印 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 使光标返回到行首,消息的其余部分覆盖then

【讨论】:

    最近更新 更多