1

Я хочу получить доступ к переменной индекса массива во время цикла по массиву в моем сценарии оболочки bash.

myscript.sh
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
  echo $i
done

Результат приведенного выше сценария:

foo
bar
baz
bat

Результат, который я ищу:

0
1
2
3

Как мне изменить мой сценарий, чтобы добиться этого?

1 ответ1

2

Добавьте один символ:

#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${!AR[*]}; do                                                                  ←
  echo "$i"
done

(Добавьте восклицательный знак (!) к расширению массива:${!AR[*]} .)  Со страницы руководства:

Расширение параметра

           ︙
    $ {!имя [@]}
    $ {!имя [*]}
      Список ключей массива.  Если имя является переменной массива, расширяется до списка индексов (ключей) массива, назначенных в имени.  Если имя не является массивом, расширяется до 0, если имя установлено, и ноль в противном случае.  Когда используется @ и расширение отображается в двойных кавычках, каждый ключ раскрывается в отдельное слово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .