2012-10-11 33 views
0

我知道如果用雙引號括起一個變量(包含文件名),它將擴大$,*和反引號(')。例如cmp "$file1" "$file2"會很好,如果兩個文件開頭都包含*或其他任何「正常」的文件。如果文件在開頭處有任何數量的破折號,它將不起作用。相反,它會嘗試去做 - 的字面含義,將其視爲一種選擇。你如何解決這個問題?如何擴展以破折號開頭的文件名( - )

這將工作:

var1=*file.txt 
var2=*file2.txt 

cmp "$var1" "$var2" 

var1=-file.txt 
cmp "$var1" "$var2" 

會說 - 是無法識別的選項。有任何想法嗎?

回答

2

大多數shell命令支持 - 選項來告訴他們,該行的其餘部分是實際的參數,而不是選擇。

+0

這工作。謝謝 – jimmyC

1

大多數命令將接受--標記的參數選項的結束,所以cmp -- "$var1" "$var2"應該工作。這實際上並不是關於shell擴展值的問題,而是關於命令本身將傳遞的參數解釋爲文件名或作爲選項。

而且,如果他們是在當前目錄下的文件,你可以做cmp ./"$var1" ./"$var2"

+0

只要'var1'包含任何相對路徑,即不能以'/ /開頭,「./$var」技巧就會工作。 – chepner

1

只是測試:

solaris10$ var3=-ts 
solaris10$ var4=ts1 
solaris10$ cmp -- "$var3" "$var4" 
-ts ts1 differ: char 10, line 1 
solaris10$ 

工作得很好。