是否有针对ruby%{}引用的bash等价物?

时间:2012-10-10 02:49:51

标签: bash quote

引用包含单引号和双引号的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"}

2 个答案:

答案 0 :(得分:5)

对于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的评论无法捕捉新行。

答案 1 :(得分:1)

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

x=$'String containing \' and "'