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

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

variable=${@:2} 

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

  • Как я могу запустить startx и запустить сценарий удаленно через SSH?
  • Заменить заполнители в шаблоне
  • Выйти из Google Chrome с терминала
  • Как использовать переменную для строки кода скрипта?
  • Возможно ли отставание между scp и проверка нового файла
  • Cron: Почему мои скрипты cron не работают, хотя cron работает
  • Сценарий Bash работает через терминал, но не через главное меню
  • Как ожидать от PID от вызванного процесса?
  • Почему этот однослойный клоббер загружается?
  • сценарий оболочки для создания каталогов, подкаталогов и файлов по шаблону
  • Как построить длинную командную строку?
  • Распечатайте последнее поле
  • 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.

    Linux и Unix - лучшая ОС в мире.