$ OPTION="-n" $ echo $OPTION $
沒有任何反應。我期待這一點。
將「-n」字符串分配給變量不起作用
$ OPTION="-n" $ echo $OPTION -n $
這是爲什麼?
$ OPTION="-n" $ echo $OPTION $
沒有任何反應。我期待這一點。
將「-n」字符串分配給變量不起作用
$ OPTION="-n" $ echo $OPTION -n $
這是爲什麼?
-n
是回聲的參數,這意味着尾隨的換行符被抑制。在$ echo $OPTION
和以下$
之間沒有空行意味着$ OPTION正確設置爲-n
。
如果您在$ OPTION前放置其他內容,回聲將按照您的預期工作。 echo
只將命令開頭處的單詞解釋爲選項。只要它找到一個非選項詞(在這種情況下爲「OPTION」),下面的所有單詞都將被視爲文字,而不會被解析爲echo
的選項。
$ echo OPTION is set to $OPTION
OPTION is set to -n
$
要獲得期望的結果,你可以這樣做:
$ OUTPUT='-n'
$ echo -en ${OUTPUT}\\n
請記住,在執行命令前的外殼擴展的環境變量。因此:
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工作