Цитирование обычно обрабатывается парсером, который не видит их, когда вы подставляете в скрипт значение $1
.
У вас может быть больше удачи с:
#!/bin/sh
eval "$1"
, что дает:
$ sh test.sh 'perl -le "for (@ARGV) { print; }" "hello world" bye'
hello world
bye
Обратите внимание, что просто заставить оболочку интерпретировать кавычки с помощью "$1"
не сработает, потому что тогда она пытается обработать первый аргумент (т. Е. Всю команду) как имя команды, которая будет выполнена. Вам нужно пройти через eval
, чтобы получить правильное цитирование и затем повторный анализ команды.
Этот подход (очевидно?) Опасен и сопряжен с угрозами безопасности.