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

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

Пример:

$ 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
29
задан dogbane 31 December 2009 в 21:25
поделиться

1 ответ

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

./script2.sh "$@"

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

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

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

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

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

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

32
ответ дан 28 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: