Я вижу это в сценарии оболочки.
variable=${@:2}
Что это делает?
bash
shell-script
ksh
Ленин Радж Раджасекаран
источник
источник
var="my_value"; echo var="${var[@]:2}"; echo "$var"
Увидеть разницу?Ответы:
Он показывает содержимое специальной переменной
$@
в Bash. Он содержит все аргументы командной строки, и эта команда принимает все аргументы со второго на и хранить их в переменнойvariable
.пример
Вот сценарий экзамена.
Пример выполнения:
Ссылки
источник
vars=( "${@:2}" )
$@
и${@}
идентичны, хотя последний имеет «более правильный» синтаксис. Вы должны использовать скобки с${@:2}
, потому что$@:2
это неоднозначно и поэтому будет интерпретироваться как${@}:2
, что не одно и то же.Эта
ksh
функция также встречается вbash
последних версияхzsh
.В
ksh
иbash
вы можете получить доступ к нескольким элементам массива, используя${array[@]:first:length}
синтаксис, который расширяет доlength
(или все, еслиlength
не указано) элементовarray
массива (в списке элементов массива, отсортированных по номерам по индексам), начиная с первый с индексом, большим или равнымfirst
. В скалярном контексте (как здесь в присваивании скалярной переменной) список элементов объединяется с пробелами сbash
иksh93
и с первым символом$IFS
(или ничего, если$IFS
пусто или пробел, если не установлено) сzsh
.Например:
$@
это особый случай.$@
массив позиционных параметров ($1
,$2
...). Но при использовании с:
,$0
также включен. Так${@:1}
же, как$@
и не${@:0}
для других массивов.Во
zsh
, это немного отличается.zsh
Добавленksh
синтаксис только недавно для совместимости, но есть собственный синтаксис для выбора диапазонов элементов.В отличие от
ksh
иbash
,zsh
массивы являются типом переменной, отличным от скалярных переменных, не разрежены (zsh
имеет ассоциативные массивы в качестве другого типа переменной) и начинаются с индекса 1 вместо 0.Для
zsh
, вы получаете доступ к диапазонам элементов массива с помощью$a[first,last]
(гдеlast
также может быть отрицательным для обратного отсчета от конца).В
zsh
,создает массив из 235 элементов, большинство из которых пустые.
$a[12,50]
будет расширяться до элементов с 12 по 50, и${a[@]:12:2}
будет расширяться только до (пусто)$a[12]
и$a[13]
элементов. Как особый случай, и опять же для переносимости сksh93
иbash
,zsh
также принимает0
первый элемент для$@
и обрабатывает это как$0
.Таким образом, вы можете использовать
${a[@]:x:n}
и${@:x:n}
для всех трех оболочек, но только для не разреженных массивов, и обратить внимание на значение IFS.источник