2009-05-08 2 views
13

Предположим, у меня есть сценарий bash под названием foo.sh.Как хранить все аргументы командной строки скрипту bash в одной переменной

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

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

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

Так что мой результат будет:

Here is a bunch of stuff on the command-line 

Как мне это сделать?

ответ

27
echo "$*" 

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

thevar="$*" 

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

0

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

echo "$*" 

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

More info here.

24

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

$ 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 

Поведение МФС следует присвоения переменных, тоже.

$ 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 

Обратите внимание, что если задание до $ МФСА было сделано после назначения $ splatvar, то все выходы будут одинаковыми ($ МФС не будет иметь никакого эффекта в примере «atsplat2»).

Смежные вопросы