Ich habe ein dynamisches Array mit Schlüsselpaarwerten und möchte jeden anderen Wert aufzählen . In diesem Fall nur die Namen im Array. Da ich bash v4 nicht verwende, kann ich seq
mit echo durch ein Array navigieren.
$ array=(Guido yes Francesca no Balthazar yes)
for x in $(seq 0 2 ${#array[@]});do echo $x;done
0
2
4
6
Dies gibt ein Element mehr zurück als die Paare, die ich habe (aufgrund des Versatzes von 0), aber ich kann das mit einfacher Bash-Mathematik erklären:
for x in $(seq 0 2 $((${#array[@]}-1)));do echo $x;done
0
2
4
Das funktioniert gut. Aber sobald ich versuche, Elemente herauszuholen $array
, erhalte ich einen Fehler, den ich nicht erklären kann. Ich habe es mit und ohne "Mathe" versucht
$ for x in $(seq 0 2 $((${#array[@]}-1)));do echo ${array[$x]};done
-bash: 0: syntax error: operand expected (error token is "0")
$ for x in $(seq 0 2 ${#array[@]});do echo ${array[$x]};done
-bash: 0: syntax error: operand expected (error token is "0")
Wie kann ich aus diesem dynamischen Array nur die Namen abrufen?
BEARBEITEN: Mein $BASH_VERSION
ist 3.2.57(1)-release
( Mac OS X 10.10.2 )
EDIT # 2: Ich bin zu dem Schluss gekommen, dass dies möglicherweise ein Fehler in dieser Version ist. Da ich eine Reihe von AWS-Instanzen verwalte, habe ich mich entschlossen, sie zu überprüfen, und alle haben Bash 4.1.2 (1). Ich habe meinen Mac auf diese Version aktualisiert und das funktioniert jetzt. Danke, dass Sie nachgesehen haben, aber ich schildere dies als eine Anomalie.
echo $BASH_VERSION
Ihrer Frage die Ausgabe von hinzu .
${array[0]}
,${array[2]}
,${array[4]}
, ...). Können Sie für den Befehl, den Sie an einen funktionierenden Befehl gesendet haben, rückwärts arbeiten (möglicherweise wird jedes Element mit einer Schleife oder gedrucktset | grep "^array"
) und diesen Befehl veröffentlichen ?