передавайте аргументы между скриптами оболочки, но сохраняйте кавычки


Как передать все аргументы одного скрипта оболочки в другой? Я попробовал $*, но, как я и ожидал, это не сработает, если вы процитировали аргументы.

Пример:

$ 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 28

1 ответ:

Используйте "$@" вместо $* для сохранения кавычек:

./script2.sh "$@"

Дополнительная информация:

Http://tldp.org/LDP/abs/html/internalvariables.html

$*
Все позиционные параметры, рассматриваемые как одно слово

Примечание: "$ * " должно быть заключено в кавычки.

$@
То же самое, что и$*, но каждый параметр является строкой в кавычках, то есть параметры передаются в неизменном виде, без интерпретации или расширения. Это означает, среди прочего, что каждый параметр в аргументе список рассматривается как отдельное слово.

Примечание: конечно, "$@" должно быть в кавычках.