【问题标题】:print double quotes in shell programming在shell编程中打印双引号
【发布时间】:2013-09-21 05:12:03
【问题描述】:

我想在 shell 编程中使用 echo 语句打印双引号。

示例

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

打印xyz,123,abc,pqrs

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

我曾尝试在 echo 语句中添加双引号,但它没有被打印出来。

【问题讨论】:

    标签: bash shell echo


    【解决方案1】:

    你只需要引用它们:

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

    如上所述here

    用双引号 ('"') 括起来的字符会保留文字 引号内所有字符的值,“$”除外, '`'、'\',以及启用历史扩展时的'!'。那些角色 '$' 和 '`' 在双引号中保留其特殊含义(请参阅 外壳扩展)。反斜杠仅在以下情况下才保留其特殊含义 后跟以下字符之一:'$'、'`'、'"'、'\' 或 新队。在双引号内,后跟一个反斜杠 这些字符被删除。反斜杠前面的字符没有 特殊含义保持不变。可以引用双引号 在双引号内加上反斜杠。如果启用, 除非“!”出现在 double 中,否则将执行历史扩展 引号使用反斜杠进行转义。 “!”之前的反斜杠 没有被删除。

    特殊参数‘*’和‘@’在双精度时有特殊含义 引号(请参阅 Shell 参数扩展)。

    【讨论】:

    • 应该是printf 而不是print
    • 你可能是想说echo而不是print
    • 是的print 命令在ksh 中使用而不是echo,但问题是针对bash,您也应该编辑您的答案或至少指定ksh 限制
    • @konsolebox 你读过 Raju 的评论吗?这就是它会产生的差异,未来的读者也会尝试你的命令并得到同样的错误。
    • @Raju 我总是更喜欢提到Advanced Bash-Scripting Guide 作为初学者。它似乎也更新了。
    【解决方案2】:

    使用printf,无需转义:

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

    尾随的; 也会被打印出来!

    【讨论】:

    • 只是printf不兼容所有shell。
    • 嗯.. printfPOSIX 定义。
    • 是的,但不是在 System V 中。
    • System V 不符合 POSIX 的事实绝不会减损这个答案。此外,问题标记为bash,因此操作系统应该无关紧要。
    • @chepner 有时我们不能仅仅因为标签就断言一个线程特定于bash,因为有很多原因可以将它添加到那里。有些人只是标记它,暗示 bash 本身就是外壳,而有些人只是将它放置给更多的观众。有时依靠标题可能更准确。
    【解决方案3】:

    您应该转义 " 以使其在输出中可见,您可以这样做:

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

    【讨论】:

    • 如果任何位置参数包含% 字符,第一个版本就会出现问题;第二个作品。
    • 您的参数也应该放在一对双引号周围:echo ""\"$1\",\"$2\",\"$3\",\"$4\"" 否则变量将受到 IFS 的分词和可能的路径名扩展。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多