Обработать все аргументы, кроме первого (в bash script)
У меня есть простой script, где первый аргумент зарезервирован для имени файла, а все остальные необязательные аргументы должны быть переданы другим частям script.
Используя Google, я нашел эту вики, но он предоставил буквальный пример:
echo "${@: -1}"
Я не могу заставить ничего работать, например:
echo "${@:2}"
или
echo "${@:2,1}"
Я получаю "плохую замену" с терминала.
В чем проблема, и как я могу обработать все, кроме первого аргумента, переданного в bash script?
Ответы
Ответ 1
Используйте это:
echo "${@:2}"
Следующий синтаксис:
echo "${*:2}"
будет работать, но не рекомендуется, потому что @Gordon уже объяснил, что с помощью *
он запускает все аргументы вместе как один аргумент с пробелами, а @
сохраняет разрывы между ними (даже если некоторые из самих аргументов содержат пробелы). Это не имеет значения с echo
, но это важно для многих других команд.
Ответ 2
Если вы хотите решение, которое также работает в /bin/sh
, попробуйте
first_arg="$1"
shift
echo First argument: "$first_arg"
echo Remaining arguments: "[email protected]"
shift [n]
сдвигает позиционные параметры n раз. A shift
устанавливает значение $1
на значение $2
, значение $2
на значение $3
и т.д., Уменьшая значение $#
на единицу.
Ответ 3
http://wiki.bash-hackers.org/scripting/posparams
Это объясняет использование shift
(если вы хотите отбросить первые N параметров), а затем реализацию массового использования.