Назначить $@ другой переменной в функции оболочки

Ваша конфигурация chkconfigбудет работать, если вы shutdownиспользуете свой экземпляр.

Я создал тестовый сценарий на своем компьютере, и он работает, если я выключаю экземпляр, и не работает, когда я перезапускаю его.

3
25.03.2020, 00:18
2 ответа

$@ — это массив, назначьте его массиву:

args=("$@")

Затем используйте его как массив:

elif [[ $commit == true ]]; then
    git commit "${args[@]}"
elif [[ $checkout == true ]]; then
    git checkout "${args[@]}"
else

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

bc -a "foo bar"

Присваивается argsкак:

args='-a foo bar'

Тогда вместо выполнения:

git commit -a "foo bar"

Вы получаете:

git commit '-a foo bar'
7
28.04.2021, 23:19

Поскольку другой ответ не POSIX, вот альтернатива. Если вы хотите раздавить аргументы позиции временно, вы можете сделать что-то вроде этого:

s1=$(printf '%s\n' "$@")

затем, когда вы будете готовы к восстановлению, сделайте следующее:

IFS='
'
set -- $s1

Обратите внимание, что это предполагает, что аргументы не содержат символы новой строки. Если они это сделают, другой необходимо использовать разделитель.

Примечание. :Если вы заметили, последняя строка содержит переменную без кавычек. Это один из немногих случаев (и, на мой взгляд, единственный случай ), где это приемлемо иметь переменные без кавычек :, где пользователь явно установил IFS. Пользователь по сути говорит: «Да, я знаю, что делаю, пожалуйста, продолжайте».

3
28.04.2021, 23:19

Теги

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