Я хотел бы сохранить все аргументы командной строки для сценария Bash в одной переменной
Допустим, у меня есть сценарий 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
Как бы я это сделал?
Ответы
Ответ 1
echo "$*"
будет делать то, что вы хотите, а именно распечатать все аргументы командной строки, разделенные пробелом (или, технически, независимо от значения $IFS
). Если вы хотите сохранить его в переменной, вы можете сделать
thevar="$*"
Если это не отвечает на ваш вопрос достаточно хорошо, я не уверен, что еще сказать...
Ответ 2
Если вы хотите избежать использования $IFS, используйте [email protected](или не вставляйте $* в кавычки)
$ cat atsplat
IFS="_"
echo " at: [email protected]"
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="_"
[email protected]
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).
Ответ 3
Посмотрите на переменную $*
. Он объединяет все аргументы командной строки в один.
echo "$*"
Это должно делать то, что вы хотите.
Дополнительная информация здесь