2017-08-29 99 views
1
NL=$'\n' 
CMD="" 
CMD="$CMD echo Hello ; $NL" 
CMD="$CMD echo World ; $NL" 
$CMD 

上面的代碼給出了以下輸出,其後面的所有東西都會循環。bash echo - 如何表示命令的結尾

Hello ; echo World ; 

無論是新的行字符還是分號在這裏都不起作用。出了什麼問題?

+3

http://mywiki.wooledge.org/BashFAQ/050 – melpomene

+2

看看這個鏈接@melpomene給你。你爲什麼想這樣做?如果您不介意危險地玩,請探索該主題上的'eval $ CMD'和變體('eval「$ CMD」',...)。然後決定做任何你想做的事情(一個[XY問題](http://mywiki.wooledge.org/XyProblem)?)以不同的方式。 –

+1

假設你使用'eval'路線,你根本不需要換行;分號本身分隔兩個命令就好了。當'$ CMD'被擴展爲不帶引號時,無論如何都會放棄換行符,但分號被視爲'echo'命令的參數(也就是說,擴展不會被重新解析)。 – chepner

回答

-2

要啓用反斜槓轉義的解釋,您必須添加-e標誌以回顯。

:/$ NL='\n' 

將換行符放入NL變量中。

:/$ CMD="" 

將CMD設置爲空字符串。

:/$ CMD="$CMD echo Hello ; $NL" 

重置CMD,因爲舊的CMD是 「」,那麼新的 「回聲您好; \ n」 個

:/$ CMD="$CMD echo World ; $NL" 

重置CMD,因爲舊的CMD是 「回聲您好; \ n」,那麼新的「回聲您好; \ n回聲世界; \ n」 個

:/$ echo -e $CMD 
echo Hello ; 
echo World ; 
+0

這是如何回答這個問題? – melpomene