передавайте аргументы между скриптами оболочки, но сохраняйте кавычки
Как передать все аргументы одного скрипта оболочки в другой? Я попробовал $*, но, как я и ожидал, это не сработает, если вы процитировали аргументы.
Пример:
$ cat script1.sh
#! /bin/sh
./script2.sh $*
$ cat script2.sh
#! /bin/sh
echo $1
echo $2
echo $3
$ script1.sh apple "pear orange" banana
apple
pear
orange
Я хочу, чтобы он распечатал:
apple
pear orange
banana
1 ответ:
Используйте
"$@"
вместо$*
для сохранения кавычек:./script2.sh "$@"
Дополнительная информация:
Http://tldp.org/LDP/abs/html/internalvariables.html
$*
Примечание: "$ * " должно быть заключено в кавычки.
Все позиционные параметры, рассматриваемые как одно слово$@
То же самое, что и$*, но каждый параметр является строкой в кавычках, то есть параметры передаются в неизменном виде, без интерпретации или расширения. Это означает, среди прочего, что каждый параметр в аргументе список рассматривается как отдельное слово.Примечание: конечно, "$@" должно быть в кавычках.