你必须用双引号括$1
"
这个工作:
#!/bin/csh
if ("$1" == "-f") then
echo RIGHT FLAG
else
echo WRONG OR NO FLAG
endif
这将产生:
% ./c.sh -f
RIGHT FLAG
% ./c.sh -z
WRONG OR NO FLAG
% ./c.sh
WRONG OR NO FLAG
一种替代的方式来达到同样是在前面加上虚拟人物,就像b
或其他什么,到都部分的==
表达式,像这样:
if (b$1 == b-f) then
之所以出现这种情况是有关的一些相当神秘的组合,看似不相关的因素:
- 首先,你选择你的命令行开关被称为
f
- 其次,表达式
if($1 == "-f")
被评估为if (-f == -f)
。
- 第三,
-f
是csh
文件查询方案的一部分与像if (==)
表达式中使用时。
上述组合通过csh
解释为尝试使用-f
操作者在名为字面上==
文件,其中,当然,是不存在的,因此在“if:缺少文件名”。
以下是csh的档案查询交换机的列表:
r, w, x, e, o, z, f, d
如果您选择的不在这个名单上的任何字母,你就不会碰到你的问题:
if($1 == "-a") then
echo OK
endif
结果到:
% ./c.sh -a
OK
%