Что означает это $ {@: 2} в сценариях оболочки

Я вижу это в сценарии оболочки.

variable=${@:2} 

Что он делает?

2 Solutions collect form web for “Что означает это $ {@: 2} в сценариях оболочки”

Он показывает содержимое специальной переменной $@ в Bash. Он содержит все аргументы командной строки, и эта команда принимает все аргументы из второго и сохраняет их в переменной, variable .

пример

Вот сценарий экзамена.

 #!/bin/bash echo ${@:2} variable=${@:3} echo $variable 

Пример выполнения:

 ./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5 

Рекомендации

  • Позиционные параметры – Расширенное руководство по сценарию Bash

Это функция ksh также найденная в bash и последних версиях zsh .

В ksh и bash вы можете получить доступ к нескольким элементам массива, используя синтаксис ${array[@]:first:length} , который расширяется до length (или всех, если length опущена) элементов array массива (в список элементов массива, отсортированный численно по индексам), начиная с первого с индексом, большим или равным first . Когда в скалярном контексте (например, здесь при назначении скалярной переменной) список элементов ksh93 с символами пробела с bash и ksh93 и с первым символом $IFS (или ничего, если $IFS пуст или пробел, если он не установлен ) с zsh .

Например:

 $ a[23]=aa[5]=ba[235]=ca[45]=d $ x=${a[@]:12:2}; printf '<%s>\n' "$x" <a d> 

$@ – частный случай. $@ – это массив позиционных параметров ( $1 , $2 …). Но при использовании с : также включается $0 . Таким образом, ${@:1} совпадает с $@ , а не ${@:0} как для других массивов.

В zsh это немного отличается. zsh добавил синтаксис ksh только недавно для совместимости, но имеет свой собственный синтаксис для выбора диапазонов элементов.

В отличие от ksh и bash , массивы zsh представляют собой другой тип переменных из скалярных переменных, не являются разреженными ( zsh имеет ассоциативные массивы как другой тип переменной) и начинаются с индекса 1 вместо 0.

Для zsh вы $a[first,last] доступ к диапазонам элементов массива с $a[first,last] (где last также может быть отрицательным для обратного отсчета с конца).

В zsh ,

 a[23]=aa[5]=ba[235]=ca[45]=d 

создает массив с 235 элементами, большинство из которых пустым. $a[12,50] будет расширяться до элементов с 12 по 50, а ${a[@]:12:2} будет расширяться только до (пустых) элементов $a[12] и $a[13] . В качестве специального случая и снова для переносимости с ksh93 и bash , zsh также принимает первый элемент для $@ и обрабатывает это как $0 .

Таким образом, вы можете использовать ${a[@]:x:n} и ${@:x:n} переносимо для всех 3 оболочек, но только для не разреженных массивов, и обратите внимание на значение IFS.

  • Как достичь переменной косвенности (обратитесь к переменной, имя которой хранится в другой переменной) в tcsh
  • О выполнении сценария оболочки
  • Общий способ объединения двух файлов в Solaris и Linux
  • отправка нескольких вложений с помощью uuencode
  • source / dev / stdin не работает должным образом
  • Параметр синтаксического анализа скрипта Bash с кавычками
  • Как узнать, есть ли подходящие символы в строке?
  • OS / X: невозможно выполнить сценарии оболочки - выдает новое окно, которое немедленно выйдет
  • Как подсчитать подпроцессы, достигшие определенного состояния
  • Превращение стандартного вывода в одну команду
  • Последний рабочий день месяца
  • Сравнить строки и обновить два разных файла
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.