La sortie de la commande ci-dessous est bizarre pour moi. Pourquoi ne me rend-il pas l'élément 5?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4
Je m'attendrais à ce que «5» soit également retourné. Courir GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
. L'ajout d'une virgule fonctionne, mais mes données d'entrée n'ont pas de virgule. Suis-je en train de manquer quelque chose?
read -d, i || [[ -n $i ]]
un la Qu'est-ce que celawhile read -r line || [[ -n $line ]]
signifie?Comme d'autres réponses l'indiquent,
-d
est un caractère de fin de ligne, pas un séparateur de champ. Tu peux fairela source
De l'homme:
Votre élément 5 n'a pas de délimiteur (virgule), il ne sera donc pas lu.
la source
Ce que vous voyez est le même comportement (et pour la même raison) que Pourquoi cette boucle "while" ne reconnaît-elle pas la dernière ligne?
Comme dans ce cas, vous pouvez modifier le comportement en ajoutant un test supplémentaire à la condition de fin de boucle, comme suit
Ex.
la source