echo
的不同實現以令人煩惱的方式表現出來。有些不採取選擇(即,只會按照您的描述回顯-e
),並自動解釋參數中的轉義序列。有些人拿旗子,除非給予-e
國旗,否則不解釋逃跑。一些取得標誌,並根據-e
標誌是否通過解釋不同的轉義序列。如果你試圖讓他們以可預見的方式行事,那麼有些人會讓你把頭髮撕掉......哦,等等,這些都是。
什麼,你可能看到的是該版本的echo
建成bash
VS /bin/echo
或可能與其他一些shell的內建之間的差異。這在我Mac OS X v10.5發貨時帶有一個bash內置的echo
回顯標誌,與我所有的腳本預期不同...
在任何情況下,都有一個解決方案:使用printf
代替。它總是在第一個參數(格式字符串)中解釋轉義序列。問題是它不會自動添加一個換行符(所以你必須記住這麼做),它還在第一個參數(它畢竟是一個格式字符串)中解釋了%
序列。一般來說,您想要將所有格式化的東西放在格式字符串中,然後在其餘參數中放入可變字符串,以便您可以控制它們如何解釋用於將它們插入到輸出中的格式。一些例子:
printf "foo\nbar\n" # this does what you're trying to do in the example
printf "%s\n" "$var" # behaves like 'echo "$var"', except escapes will never be interpreted
printf "%b\n" "$var" # behaves like 'echo "$var"', except escapes will always be interpreted
printf "%b\n" "foo\nbar" # also does your example
我的情況下,運行Ubuntu 10.04清醒這一點很重要 – 2010-12-14 04:30:52
您使用的呼應?在命令行上鍵入'回顯'。 – 2010-12-14 04:33:48
事實證明,我在我的腳本中使用'Bourne Shell'版本,但在交互版本中使用Bash版本。 – 2010-12-14 09:49:40