16
A
回答
4
變量var包含-e XYZ,如果您通過$的-e訪問變量被解釋爲回聲命令行選項。請注意,$ VAR的內容不會自動包含到「」中。
使用回聲「$ VAR」來解決您的問題。
3
嘗試:
echo "$VAR"
代替。
(-e
是echo
的有效選項 - 這是導致此現象的原因)。
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"
相關問題
- 1. 字符串以空字符串開頭(「」)
- 2. Bash字符串以數字開頭的零個數
- 3. PHP如何回顯以「<」開頭的字符串
- 4. Concat以字符串開頭
- 5. bash:寫入以字符串開頭的所有行
- 6. bash:獲取以給定字符串開頭的命令列表
- 7. bash:檢查字符串是否以「/ *」開頭
- 8. 檢查字符串以數字開頭
- 9. 以C開頭的字符串切片
- 10. BASH函數內部回顯字符串
- 11. 過濾掉以字符串開頭的路徑字符串
- 12. 查找以字符串AS3開頭的字符串
- 13. 匹配不以字符串開頭的字符串
- 14. 過濾文本並返回以#開頭的字符串?
- 15. android json以字符串開頭
- 16. 字符串以Google腳本開頭
- 17. RegEx匹配字符串開頭的符號或字符串本身的開頭
- 18. 檢查字符串是否以字符串開頭
- 19. KSH檢查字符串是否以子字符串開頭
- 20. 如果字符串以子字符串開頭,使用std :: equal
- 21. 檢查字符串是否以另一個字符串開頭?
- 22. 查找以 - 開頭並以換行符結尾的字符串
- 23. 使用以數字開頭的字符串來顯示多個字符的子字符串
- 24. 匹配以特定字符開頭的字符串
- 25. 檢查字符串中以字符開頭的單詞@
- 26. 以冒號字符開頭的EXTJS方法出錯字符串
- 27. preg_match字符串必須以字母字符開頭
- 28. bash數組中的元素不以特定字符開頭
- 29. Bash腳本:如何查找以一個字符開頭的行?
- 30. Ruby正則表達式:匹配以字符串開頭還是換行符開頭的匹配字符串?
大部分正確的答案。儘管POSIX標準清楚地表明「實現不應該支持任何選項」,但歷史上實現的一部分確實支持選項(違反標準)。所以'printf'是正確的解決方案,'echo'實際上應該用於輸出一些常量字符串,比如「Hello world」,你知道它不包含破折號或者反斜線。 – 2010-09-08 05:21:49
很棒的回答。現在試圖弄清楚這一點。謝謝。 – 2012-05-25 23:23:54
如果你想使用'echo',你可以使用轉義序列'echo -e'\ 055e''。 – dosentmatter 2018-02-15 19:34:07