Как хранить все аргументы командной строки для скрипта bash в одной переменной - PullRequest
13 голосов
/ 09 мая 2009

Допустим, у меня есть bash-скрипт с именем foo.sh .

Я бы хотел назвать это так

foo.sh Here is a bunch of stuff on the command-line

и я бы хотел, чтобы весь этот текст был сохранен в одной переменной и распечатан.

Итак, мой вывод будет:

Here is a bunch of stuff on the command-line

Как бы я это сделал?

Ответы [ 3 ]

27 голосов
/ 09 мая 2009

Если вы хотите избежать использования $ IFS, используйте $ @ (или не заключайте $ * в кавычки)

$ cat atsplat
IFS="_"
echo "     at: $@"
echo "  splat: $*"
echo "noquote: "$*

$ ./atsplat this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

Поведение IFS также соответствует присвоениям переменных.

$ cat atsplat2
IFS="_"
atvar=$@
splatvar=$*
echo "     at: $atvar"
echo "  splat: $splatvar"
echo "noquote: "$splatvar

$ ./atsplat2 this is a test
     at: this is a test
  splat: this_is_a_test
noquote: this is a test

Обратите внимание, что если присвоение $ IFS было выполнено после присвоения $ splatvar, то все выходные данные были бы одинаковыми ($ IFS не имел бы эффекта в примере "atsplat2").

27 голосов
/ 09 мая 2009
echo "$*"

будет делать то, что вы хотите, а именно выводить все аргументы командной строки, разделенные пробелом (или, технически, независимо от значения $IFS). Если вы хотите сохранить его в переменной, вы можете сделать

thevar="$*"

Если это не отвечает на ваш вопрос достаточно хорошо, я не уверен, что еще сказать ...

0 голосов
/ 09 мая 2009

Посмотрите на переменную $*. Он объединяет все аргументы командной строки в один.

echo "$*"

Это должно делать то, что вы хотите.

Подробнее здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...