Вывод команды ниже странный для меня. Почему он не возвращает мне элемент 5?
$ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done
0
1
2
3
4
Я ожидаю, что «5» также будет возвращено. Запуск GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
. Добавление запятой работает, но у моих входных данных нет запятой. Я что-то пропустил?
read -d, i || [[ -n $i ]]
а-ля. Что этоwhile read -r line || [[ -n $line ]]
значит?Как утверждают другие ответы,
-d
это символ конца строки, а не разделитель полей. Ты можешь сделатьисточник
От мужчины:
Ваш элемент 5 не имеет разделителя (запятой), поэтому он не будет прочитан.
источник
То, что вы видите, такое же поведение (и по той же причине), что и почему этот цикл while не распознает последнюю строку?
Как и в этом случае, вы можете изменить поведение, добавив дополнительный тест к условию завершения цикла:
Ex.
источник