Как назначить список параметров «$ @» другой переменной? - PullRequest
1 голос
/ 09 июля 2010

В сценарии оболочки я хочу, чтобы переменная p была равна "$@", чтобы следующие две строки кода давали одинаковый результат:

for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done

Если я делаю p=$@или p="$@" это не работает.Когда аргументы командной строки имеют пробелы в своих именах, я не могу найти простой обходной путь для этой проблемы (комбинация p="$@" и for x in $p (кавычки удалены около $ p) работает, когда пробелов нет).

1 Ответ

9 голосов
/ 09 июля 2010

"$@" является особенным в том смысле, что оно, хотя и является выражением в одной кавычке, расширяется до нуля или более «слов».Вы не можете выполнить то же самое с обычным параметром, но (используя немного другой синтаксис) это можно сделать с помощью переменной / параметра массива (например, в bash , ksh , зш ):

array_var=("$@")
for x in "${array_var[@]}"; do printf '<<%s>>\n' "$x"; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...