И bash, и ruby обрабатывают двойные кавычки особым образом: строки в двойных кавычках интерполируются перед передачей получателю. Я настоятельно рекомендую вам начать с изучения чего-то одного, в первую очередь, вместо того, чтобы добиться нулевого прогресса в обоих из-за вызванных ошибок.
Отвечая на поставленный вопрос, необходимо избегать двойных кавычек при передаче туда и обратно, так как и ruby, и bash рассматривают их как разделители содержимого и отбрасывают, когда содержимое уже проанализировано в результирующей строке.
Это будет работать:
exec %|ruby_to_bash #{param.gsub('"', '\"')}|
Я использую %|
и |
в качестве разделителей строк, чтобы избежать столкновений с внутренними кавычками.
Sidenote: вышеупомянутое не будет работать для ввода, содержащего пробелы, но я намеренно избегаю показывать, как обращаться с пробелами, поскольку он ведет в тупик; Обрабатывая пробелы, окружая интерполированные param
одинарными кавычками, мы склонны ошибаться с внутренними одинарными кавычками в объекте JSON и т. д.
Приведенный выше код никто не должен производить на производстве.