2010-09-06 78 views

回答

4

變量var包含-e XYZ,如果您通過$的-e訪問變量被解釋爲回聲命令行選項。請注意,$ VAR的內容不會自動包含到「」中。

使用回聲「$ VAR」來解決您的問題。

3

嘗試:

echo "$VAR" 

代替。

-eecho的有效選項 - 這是導致此現象的原因)。

0

-e被bash解釋爲echo的參數。嘗試

echo "$VAR" 
37

回答說,把$VAR放在引號只能通過副作用正確。也就是說,在加引號時,echo(1)收到一個參數-e xyz,並且由於這不是有效的選項字符串,因此只打印出echo。這是一個副作用,因爲echo可以輕鬆打印有關格式錯誤的選項的錯誤。大多數程序會這樣做,但似乎GNU echo(從coreutils)和bash內置的版本只是echo字符串,以連字符開頭,但不是有效的參數字符串。這種行爲沒有記錄,所以不應該依賴它。

此外,如果$VAR包含一個有效的echo選項參數,然後報價$ VAR不會幫助:

$ VAR="-e" 
$ echo "$VAR" 

$ 

大多數GNU計劃採取--作爲參數意味着沒有更多的選項處理 - 所有參數--後將作爲非選項參數進行處理。 bash echo不支持這個,所以你不能使用它。即使這樣做,它也不會攜帶。 echo還有其他便攜性問題(-n vs \c,否-e)。

正確和便攜的解決方案是使用printf(1)

printf "%s\n" "$VAR" 
+0

大部分正確的答案。儘管POSIX標準清楚地表明「實現不應該支持任何選項」,但歷史上實現的一部分確實支持選項(違反標準)。所以'printf'是正確的解決方案,'echo'實際上應該用於輸出一些常量字符串,比如「Hello world」,你知道它不包含破折號或者反斜線。 – 2010-09-08 05:21:49

+0

很棒的回答。現在試圖弄清楚這一點。謝謝。 – 2012-05-25 23:23:54

+0

如果你想使用'echo',你可以使用轉義序列'echo -e'\ 055e''。 – dosentmatter 2018-02-15 19:34:07

相關問題