Почему «чтение» ведет себя по-разному с одним и тем же вводом? - PullRequest
1 голос
/ 21 марта 2011

Почему read ведет себя по-разному при одинаковом вводе из канала и heredoc:

printf "" | while read line; do echo "line=$line"; done   # outputs nothing    
while read line; do echo "line=$line"; done <<< ""        # outputs 'line='

Как отключить вывод во втором случае?

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

Здесь документ имеет неявный символ новой строки (\n) в конце; printf "" ничего не выводит вообще. Я не знаю, как можно вручную избавиться от неявного перевода строки.

2 голосов
/ 21 марта 2011

Если вы можете удалить все пустые строки ...

while read line; do if test -n "$line"; then echo "line=$line"; fi; done <<< ""
1 голос
/ 25 марта 2011

Как насчет использования $'\c':

man bash | less -p '\\c * suppress trailing newline'

str=""
while read line; do echo "line=$line"; done <<<$'\c'"${str}"

str="abc"
while read line; do echo "line=$line"; done <<<$'\c'"${str}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...