
Ich habe ein paar Variablen a, b und c.
Ich wollte alle ihre Werte in einer For-Schleife anzeigen.
for i in ${!a[@]}; do
echo "${a[$i]} ${b[$i]} ${c[$i]}"
done
Jetzt werden Werte nach oben verschoben, da andere Werte in der Variable c absichtlich leer sind.
mammals land elephant
reptile water pigeon
birds air
Wie erstelle ich eine leere Variable, damit die Werte nicht verschoben werden?
Ich habe versucht, Folgendes zu tun: Wenn die Zeichenfolge mit „Wasser“ übereinstimmt, werden nur a und b ausgegeben.
for i in ${!a[@]}; do
if [ "$c" = "water"]; then
echo "${a[$i]} ${b[$i]}"
else
echo "${a[$i]} ${b[$i]} ${c[$i]}"
fi
done
Antwort1
Suchen Sie nach so etwas?
a=("" b c)
b=(d "" f)
c=(g h "")
for i in ${!a[@]}; do
printf "%s\t" "${a[$i]}" "${b[$i]}" "${c[$i]}"
echo
done
Die Ausgabe ist
$ bash arr.sh
d g
b h
c f
Ich habe leere Zeichenfolgen verwendet, um „fehlende“ Werte auf der Diagonale zu markieren. Bei der zusammengesetzten Zuweisung ist es nicht möglich, einen Index zu überspringen, da muss etwas vorhanden sein. Natürlich können Sie stattdessen auch „unassigned“ verwenden a[1]=b a[2]=c
und lassen a[0]
oder explizit „unassigned“ angeben unset a[0]
.
Wenn Sie ein richtiges zweidimensionales Array benötigen, sollten Sie eine richtige Programmiersprache und nicht die Shell verwenden ... Eine Art Workaround könnte darin bestehen, assoziative Arrays mit Schlüsseln wie zu verwenden 2-3
, wobei die beiden Indizes durch eine Zeichenfolge getrennt sind. Aber es hängt davon ab, was Sie tatsächlich tun.
(In Ihrem letzten Snippet verwenden Sie $c
ohne Index (erhalten dasselbe wie ${c[0]}
und verwenden dann einen Index auf EMPTY
, obwohl Sie ihm nur einen Wert zugewiesen haben.)