2013-09-21 107 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