【发布时间】:2013-09-21 05:12:03
【问题描述】:
我想在 shell 编程中使用 echo 语句打印双引号。
示例:
echo "$1,$2,$3,$4";
打印xyz,123,abc,pqrs
如何打印"xyz","123","abc","pqrs";
我曾尝试在 echo 语句中添加双引号,但它没有被打印出来。
【问题讨论】:
我想在 shell 编程中使用 echo 语句打印双引号。
示例:
echo "$1,$2,$3,$4";
打印xyz,123,abc,pqrs
如何打印"xyz","123","abc","pqrs";
我曾尝试在 echo 语句中添加双引号,但它没有被打印出来。
【问题讨论】:
你只需要引用它们:
echo "\"$1\",\"$2\",\"$3\",\"$4\""
如上所述here:
用双引号 ('"') 括起来的字符会保留文字 引号内所有字符的值,“$”除外, '`'、'\',以及启用历史扩展时的'!'。那些角色 '$' 和 '`' 在双引号中保留其特殊含义(请参阅 外壳扩展)。反斜杠仅在以下情况下才保留其特殊含义 后跟以下字符之一:'$'、'`'、'"'、'\' 或 新队。在双引号内,后跟一个反斜杠 这些字符被删除。反斜杠前面的字符没有 特殊含义保持不变。可以引用双引号 在双引号内加上反斜杠。如果启用, 除非“!”出现在 double 中,否则将执行历史扩展 引号使用反斜杠进行转义。 “!”之前的反斜杠 没有被删除。
特殊参数‘*’和‘@’在双精度时有特殊含义 引号(请参阅 Shell 参数扩展)。
【讨论】:
printf 而不是print
echo而不是print!
print 命令在ksh 中使用而不是echo,但问题是针对bash,您也应该编辑您的答案或至少指定ksh 限制
使用printf,无需转义:
printf '"%s","%s","%s","%s";\n' $1 $2 $3 $4
尾随的; 也会被打印出来!
【讨论】:
printf 由 POSIX 定义。
bash,因此操作系统应该无关紧要。
bash,因为有很多原因可以将它添加到那里。有些人只是标记它,暗示 bash 本身就是外壳,而有些人只是将它放置给更多的观众。有时依靠标题可能更准确。
您应该转义 " 以使其在输出中可见,您可以这样做:
echo \""$1"\",\""$2"\",\""$3"\",\""$4"\"
【讨论】:
% 字符,第一个版本就会出现问题;第二个作品。
echo ""\"$1\",\"$2\",\"$3\",\"$4\"" 否则变量将受到 IFS 的分词和可能的路径名扩展。