【问题标题】:Is there a bash equivalent for ruby %{} quoting?ruby %{} 引用是否有 bash 等价物?
【发布时间】:2012-10-10 02:49:50
【问题描述】:

在没有变量插值的情况下,引用包含单引号和双引号的 bash 命令参数的最简单方法是什么?

在 Ruby 中,您可以使用 %{}、%[] 等来引用字符串。在这种情况下,单引号和双引号将被视为字符。

我的问题并不完整,这里是进一步的解释:

我之所以这么问是因为我经常在命令行运行 ruby​​ 和 perl 代码。由于这些语言广泛使用单引号和双引号以及 $1 $_ 等全局变量。我与 bash 发生冲突。

示例:

ls -lat | ruby -p -e '$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'\''" + ($3 || "") + "'\''" + "\n"'

我正在寻找类似于 ruby​​ 中的 % 引用的东西:

ls -lat | ruby -p -e %{$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'" + ($3 || "") + "'" + "\n"}

【问题讨论】:

标签: bash quote


【解决方案1】:

使用heredoc 可能最简单:

read -r arg << \EOF
A string "with" 'quotes'
EOF

将 $arg 设置为 heredoc 的未插值内容。这不允许在变量中嵌入换行符。如果你想要一个多行值:

unset var; while read -r v; do var="$var${var+
}$v; done << \EOF
A multi-line "" string
with different 'quotes'
EOF

不幸的是,Ormaaj 使用 IFS 的注释无法捕获换行符。

【讨论】:

    【解决方案2】:

    由于您不需要变量插值,您可以使用$'...' 引用(虽然您仍然需要转义单引号,所以这可能不符合您的要求):

    x=$'String containing \' and "'
    

    【讨论】:

    • 我不知道这种类型的引用,最好是我目前使用的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2010-12-04
    • 2012-05-20
    • 2019-03-11
    • 2014-02-24
    • 2018-08-26
    • 2012-05-12
    相关资源
    最近更新 更多