Chcę uzyskać dostęp do zmiennej indeksu tablicy podczas zapętlania tablicy w moim skrypcie powłoki bash.
myscript.sh#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
echo $i
done
Wynikiem powyższego skryptu jest:
foo
bar
baz
bat
Wynik, którego szukam to:
0
1
2
3
Jak mogę zmienić skrypt, aby to osiągnąć?
bash
shell
shell-script
Kosiarka
źródło
źródło
"${array[*]}"
zamiast"${array[@]}"
. Używanie*
zamiast@
mniej więcej traktuje go jako ciąg zamiast tablicy.Odpowiedzi:
Możesz to zrobić za pomocą listy kluczy tablicy . Ze strony podręcznika
bash
:Na przykład:
To skutkuje:
Pamiętaj, że działa to również w przypadku kolejnych indeksów:
To skutkuje:
źródło
printf "$i=(${AR[i]})\n"
lubecho "$i=(${ARi]})"
oba dają trochę więcej, pokazując, jak zdobyć key & var, ale ściśle mówiącecho "$i"
odpowiedziałby OP. Reszta to „bash fu” :)Oprócz odpowiedzi jordanma możesz również wykonać
C
podobną pętlę wbash
:źródło
możesz zrobić coś takiego:
wynik:
źródło