Ich arbeite daran, sich an Shell-Skripte zu gewöhnen und lief über ein Verhalten, das ich interessant und ungeklärt fand. Im folgenden Code wird die erste for-Schleife korrekt ausgeführt, die zweite dagegen nicht.Bash for-Schleife-Syntax
declare letters=(a b c d e f g)
for i in {0..7}; do
echo ${letters[i]}
done
for i in {0..${#letters[*]}}; do
echo ${letters[i]}
done
Die zweite for-Schleife führt zu dem folgenden Fehler:
syntax error: operand expected (error token is "{0..7}")
Was mich verwirrt ist, dass ${#letters[*]}
eindeutig ausgewertet wird immer, richtig, auf die Nummer 7. Aber trotz der Code auch wenn nicht Wir haben gerade gesehen, dass die gleiche Schleife mit {0..7}
völlig in Ordnung funktioniert.
Was ist der Grund dafür?
Ich verwende OS X 10.12.2, GNU Bash Version 3.2.57.
Nicht sicher über die Erklärung für diese Aber wenn Sie {0..7} verwenden, wird dies auf erweitert 1 2 3 4 5 ... usw. Aber wenn Sie Sie {0 .. $ {# Buchstaben [* ]} dies erweitert sich zu einer Zeichenkette "{0..7}" Welche Sie nicht auf – Yarden