Подтвердить что ты не робот

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

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

Пример:

$ 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
4b9b3361

Ответ 1

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

./script2.sh "[email protected]"

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

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

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

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

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

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