Ответ 1
argv="su -c \"$RVM_PATH wrapper $config_rvm \\\"$PASSENGER_RVM_BIN $command $options\\\"\" web"
У меня возникают трудности с вложенными кавычками в bash script
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
или любая из других переменных может включать обратную косую черту, то это также можно интерпретировать как введение обратного слэша-escape.
Используйте вместо этого массив.
#!/bin/bash
cmd=(echo "foo bar")
"${cmd[@]}"