Аргументы командной строки с пробелами - PullRequest
0 голосов
/ 06 июля 2018

Вызов сценария оболочки с аргументами командной строки, содержащими пробелы, обычно решается заключением аргумента в кавычки:

getParams.sh 'one two' 'foo bar'

Производит:

one two
foo bar

getParams.sh:

while [[ $# > 0 ]]
do
    echo $1
    shift
done

Однако, если переменная оболочки сначала определена для хранения значения аргументов, таких как:

args="'one two' 'foo bar'"

тогда почему:

getParams.sh $args

не распознаете одинарные кавычки, включающие сгруппированные аргументы? Выход:

'one
two'
'three
four'

Как сохранить аргументы командной строки, содержащие пробелы, в переменной, чтобы при вызове getParams аргументы группировались в соответствии с аргументами в кавычках, как в исходном примере?

1 Ответ

0 голосов
/ 06 июля 2018

Использовать массив:

args=('one two' 'foo bar')

getParams.sh "${args[@]}"

Использование args="'one two' 'foo bar'" не сработает, потому что одинарные кавычки сохраняют свое буквальное значение в двойных кавычках.

Чтобы сохранить несколько аргументов в аргументах (а также обрабатывать специальные символы, такие как *), вы должны заключить вашу переменную в кавычки:

while [[ $# -gt 0 ]]
do
    echo "$1"
    shift
done
...