Die Ausgabe des folgenden Befehls ist für mich seltsam. Warum gibt es mir Element 5 nicht zurück?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4
Ich würde erwarten, dass '5' ebenfalls zurückgegeben wird. Laufen GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
. Das Hinzufügen eines Kommas funktioniert, aber meine Eingabedaten haben kein Komma. Vermisse ich etwas
quelle
read -d, i || [[ -n $i ]]
a la machen Was bedeutetwhile read -r line || [[ -n $line ]]
das?Wie in anderen Antworten angegeben,
-d
handelt es sich um ein Zeilenendezeichen und nicht um ein Feldtrennzeichen. Du kannst tunquelle
Vom Menschen:
Ihr Element 5 hat kein Trennzeichen (Komma), daher wird es nicht gelesen.
quelle
Was Sie sehen, ist dasselbe Verhalten (und aus demselben Grund) wie Warum erkennt diese 'while'-Schleife die letzte Zeile nicht?
Wie in diesem Fall können Sie das Verhalten wie folgt ändern, indem Sie der Schleifenbeendigungsbedingung einen zusätzlichen Test hinzufügen
Ex.
quelle