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

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

Пример:

$ 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

person dogbane    schedule 31.12.2009    source источник
comment
См. также stackoverflow.com/questions/255898 (немного другой вопрос, но ответ $@ такой же, как и здесь).   -  person Jonathan Leffler    schedule 01.01.2010
comment
Я многому научился из этого, спасибо!   -  person dogbane    schedule 01.01.2010


Ответы (1)


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

./script2.sh "$@"

Больше информации:

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

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

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

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

Примечание. Конечно, "$@" следует заключать в кавычки.

person ZoogieZork    schedule 31.12.2009
comment
У меня проблемы со скобками - я столкнулся с этим и не смог решить сам. - person Penz; 26.12.2015