Переменная $@
распространяется на все параметры командной строки, разделенные пробелами.Вот пример.
abc "$@"
При использовании $@
вы должны (почти) всегда ставить его в двойные кавычки, чтобы избежать неправильного разбора аргумента с пробелами в них.Это работает для нескольких аргументов.$*
будет передано как одна длинная строка.
Также ничего не стоит, если $0
отсутствует в $@
.
Раздел специальных параметров Справочного руководства Bash говорит, что @
расширяется до параметров positiaonl начиная с единицы.Когда раскрытие происходит в двойных кавычках, каждый параметр раскрывается в отдельное слово.То есть "$@"
эквивалентно "$1" "$2" "$3"...
.
Если вы хотите передать все, кроме первых аргументов, вы можете сначала использовать shift
, чтобы «потреблять» первый аргумент изатем передайте $@
, чтобы передать оставшиеся аргументы другой команде.В bash (но не в простых оболочках POSIX) вы можете сделать это, не связываясь со списком аргументов, используя вариант среза массива: "${@:3}"
вернет вам аргументы, начинающиеся с "$3"
."${@:3:4}"
даст вам до четырех аргументов, начиная с "$3"
(то есть "$3" "$4" "$5" "$6"
), если было передано столько аргументов.