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
.
我正在尝试在 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
.