В вашем вопросе возникает вопрос о «сценарии unix shell», но помечен bash
. Это два разных ответа.
Спецификация POSIX для оболочек не имеет ничего общего с массивами, поскольку исходная оболочка Bourne не поддерживала их. Даже сегодня, на FreeBSD, Ubuntu Linux и многих других системах, /bin/sh
не поддерживает массив. Поэтому, если вы хотите, чтобы ваш скрипт работал в разных совместимых с Bourne оболочках, вы не должны их использовать. В качестве альтернативы, если вы принимаете определенную оболочку, то обязательно укажите ее полное имя в строке shebang, например. #!/usr/bin/env bash
.
Если вы используете bash или zsh или современную версию ksh , вы можете создать такой массив:
myArray=(first "second element" 3rd)
и элементы доступа, подобные этому
$ echo "${myArray[1]}"
second element
Вы можете получить все элементы через "${myArray[@]}"
. Вы можете использовать нотацию фрагмента $ {array [@]: start: length} , чтобы ограничить часть массива, на которую ссылаются, например. "${myArray[@]:1}"
, чтобы оставить первый элемент.
Длина массива - ${#myArray[@]}
. Вы можете получить новый массив, содержащий все индексы из существующего массива с "${!myArray[@]}"
.
Старые версии ksh до ksh93 также имели массивы, но не нотацию на основе скобок и не поддерживали нарезку. Вы можете создать такой массив, как это:
set -A myArray -- first "second element" 3rd