猛砸嵌套的报价和eval
问题描述:
我有困难嵌套报价bash脚本中猛砸嵌套的报价和eval
argv="su -c '$RVM_PATH wrapper $config_rvm \'$PASSENGER_RVM_BIN $command $options\'' web"
eval $argv
上面让我
eval: line 162: unexpected EOF while looking for matching `''
eval: line 163: syntax error: unexpected end of file
答
argv="su -c \"$RVM_PATH wrapper $config_rvm \\\"$PASSENGER_RVM_BIN $command $options\\\"\" web"
答
这是因为\'
没有按”在单引号字符串中没有任何特殊含义;它意味着简单的“反斜杠,然后是字符串结尾”。
一种选择是使用$'...'
代替'...
';这将让你使用反斜杠转义。它应该是这样的:
argv="su -c $'$RVM_PATH wrapper $config_rvm \'$PASSENGER_RVM_BIN $command $options\'' web"
缺点是,如果有任何机会,$RVM_PATH
,$config_rvm
,或任何其他变量可以包括一个反斜杠,那么它也可以解释为引入一个反斜杠转义。
我不确定您提供的链接是否讨论了您对bash数组的使用建议。 – 2016-02-15 03:49:48
@TomHale:我的答案有一个语法错误。 – 2016-09-13 04:00:39