2013-09-21 151 views
17

我想在shell編程中使用echo語句打印雙引號。在shell編程中打印雙引號

echo "$1,$2,$3,$4"; 

打印xyz,123,abc,pqrs

如何打印"xyz","123","abc","pqrs";

我曾試圖把雙引號的回聲聲明,但它並沒有被打印。

回答

25

你只要說出來了:

echo "\"$1\",\"$2\",\"$3\",\"$4\"" 

如前所述here:在雙引號

內附字符( '「')保留了引號中的所有字符的字面 值,用「$」之外, 「'」,「\」,並且,如果啓用了歷史擴展,「!」。字符 「$」和「'」保留雙引號中仍然具有特殊意義(見 殼牌擴張)。反斜槓保留其只有當後跟以下字符之一 特殊含義:「$」,「'」,「」「,‘\’,或 換行符在雙引號,反斜線被後面的 其中之一字符被刪除。沒有 特殊含義前面字符反斜線保持不變。雙引號可以通過用反斜槓它前面加引號雙引號內 。如果啓用, 歷史擴展將除非進行「!」出現在雙 引號使用反斜線進行轉義,'!' 前的反斜槓不會被移除

特殊參數'*'和'@'hav e雙重 報價時的特殊含義(請參閱殼參數擴展)。

+1

應該'printf'不'print' –

+0

你大概的意思是說'echo',而不是'print'! – devnull

+0

@snyder在其他shell中也有一個打印命令。 – konsolebox

3

你應該逃脫",使其在輸出中出現,你可以這樣做:

echo \""$1"\",\""$2"\",\""$3"\",\""$4"\" 
+0

如果任何位置參數包含'%'字符,則第一個版本會遇到問題;第二部作品。 –

+0

@JonathanLeffler哦,你是對的,編輯了答案 –

+0

你的論點也應該放在一對雙引號中:'echo「」\「$ 1 \」,\「$ 2 \」,\「$ 3 \」,\「 $ 4 \「」'或其他變量將受IFS分詞和可能的路徑名擴展 – konsolebox

8

使用printf,不需要轉義:

printf '"%s","%s","%s","%s";\n' $1 $2 $3 $4 

和後;也打印了!

+0

只有printf與所有shell不兼容 – konsolebox

+1

嗯..'printf'是由[ POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html)。 – devnull

+0

是的,但不是在系統V中。 – konsolebox