你必須用雙引號括$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
%