引用包含单引号和双引号而没有变量插值的bash命令参数的最简单方法是什么?
在Ruby中,您可以使用%{},%[]等来引用字符串.在这种情况下,单引号和双引号将被视为字符.
我的问题还没有真正完整,这里有进一步的解释:
我问的原因是因为我经常在命令行运行ruby和perl代码.由于这些语言使用广泛的单引号和双引号以及$ 1 $ _等全局变量,因此与bash发生冲突.
例:
ls -lat | ruby -p -e '$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'\''" + ($3 || "") + "'\''" + "\n"'
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似于红宝石中%引用的东西:
ls -lat | ruby -p -e %{$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'" + ($3 || "") + "'" + "\n"}
Run Code Online (Sandbox Code Playgroud)
使用heredoc可能最容易:
read -r arg << \EOF
A string "with" 'quotes'
EOF
Run Code Online (Sandbox Code Playgroud)
将$ arg设置为heredoc的未插入内容.这不允许将换行符嵌入变量中.如果你想要一个多行值:
unset var; while read -r v; do var="$var${var+
}$v; done << \EOF
A multi-line "" string
with different 'quotes'
EOF
Run Code Online (Sandbox Code Playgroud)
不幸的是,Ormaaj使用IFS发表评论并不能捕捉新行.