Я хотел бы сохранить все параметры командной строки к сценарию 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

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

13
задан Peter Mortensen 20 August 2019 в 23:06
поделиться

3 ответа

echo "$*"

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

thevar="$*"

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

27
ответ дан 1 December 2019 в 17:31
поделиться

Если вы хотите избежать использования $ 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
ответ дан 1 December 2019 в 17:31
поделиться

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

echo "$*"

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

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

0
ответ дан 1 December 2019 в 17:31
поделиться
Другие вопросы по тегам:

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