2011-05-23 95 views

回答

5

-n是回聲的參數,這意味着尾隨的換行符被抑制。在$ echo $OPTION和以下$之間沒有空行意味着$ OPTION正確設置爲-n

如果您在$ OPTION前放置其他內容,回聲將按照您的預期工作。 echo只將命令開頭處的單詞解釋爲選項。只要它找到一個非選項詞(在這種情況下爲「OPTION」),下面的所有單詞都將被視爲文字,而不會被解析爲echo的選項。

$ echo OPTION is set to $OPTION 
OPTION is set to -n 
$ 
0

要獲得期望的結果,你可以這樣做:

$ OUTPUT='-n' 
$ echo -en ${OUTPUT}\\n 
2

請記住,在執行命令前的外殼擴展的環境變量。因此:

option="-n" 
echo $option 

變得

echo -n "" 

隨着$option值被解釋爲echo命令的參數。如果您正在使用Kornshell(這類似於BASH 95%),你也可以使用內置的print命令:

option="-n" 
print -- "$option" 

不幸的是,BASH沒有打印命令,並使用在雙破折號BASH echo命令會打印出雙重短劃線 - 而不是你想要的。

相反,你必須使用printf命令比echo慢一點:

option="-n" 
printf -- "$option\n" #Must include the \n to make a new line! 

當然,如果你有這個,你會遇到麻煩:

option="%d" 
printf -- "$option\n" 

要解決這個問題:

option="%d" 
printf "%s\n", "$option" 

順便說一句,你有同樣的問題與測試:

option="-n" 
if [ "$option" -eq "-n" ] #Won't work! 

這就是爲什麼你會看到有人這樣做:

如果[ 「X $選項」 當量 「X-N」] #Will工作

相關問題