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

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

variable=${@:2} 

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

  • Что означает различие с фигурными фигурными скобками?
  • Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки?
  • Что делает выход в блоке if в сценарии оболочки?
  • Преобразование координат GPS с помощью сценария bash
  • Лучший способ запуска одиночного цикла вместо двух для циклов
  • Расширения файлов для сценариев unix shell
  • echo $ 1 = некотируемая разнесенная строка?
  • Рекурсивно найти все файлы с именем «file.txt» и выполнить команду sed
  • 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 - лучшая ОС в мире.