Array-Elemente in Bash-Skripten
Wie kann ich eine if-Anweisung, wie diese zu vergleichen und das element mit dem Wert einer Variablen.
Zum Beispiel werde ich durch ein array von zahlen, und die überprüfung auf ein minimum. Ich bin mit der syntax Probleme.
for ((j=0;j<$i;j++)); do
if [ "$array[$j]" -gt $min ]; then
min=${array[$j]}
fi
done
echo The minimum number is $min
- Leichter Loop-Schleife über ein array mit
for el in "${array[i]}"
. - Oder, im zsh,
echo ${${(n)ary}[1]}
. - Tippfehler entdeckt:
for el in "${array[@]}"
statt!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
if
- Anweisung fehltthen
Klausel:Auch im wahren Geist von UNIX-tools, halte etwas eleganter:
for
? Sie müssen;do
sowiearray
ist ein array, dann$array
ist das gleiche wie${array[0]}
. Warum? Denn das ist die Art, wie es geschrieben wurde.read min_element < <(printf '%s\n' "${array[@]}" | sort -n)
um loszuwerden, der zwei nicht benötigten externen Werkzeuge und zwei nicht mehr benötigte Leitungen! Oh, Nein... Sie dachte, Ihre Sache war elegant...Einige Kommentare:
-gt
nicht den gewünschten operator für das abrufen der minHier ist ein einfaches Beispiel korrigiert (nur Bash, ohne weitere Befehle) :
EDIT : Test durchgeführt, nach dem Kommentar von gniourf_gniourf (siehe die Kommentare)
m=${array[0]}; for i in "${array[@]:1}"; do ((i<m)) && m=$i; done
und ich Ihren Beitrag bearbeitet um es zu beheben!