)?

нализа полей, разделенных двоеточиями, я могу использоватьread с обычаемIFS:

$ echo 'foo.c:41:switch (color) {' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 41 | switch (color) {

Если последнее поле содержит двоеточия, нет проблем, двоеточия сохраняются.

$ echo 'foo.c:42:case RED: //alert' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED: //alert

Конечный разделитель также сохраняется ...

$ echo 'foo.c:42:case RED: //alert:' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED: //alert:

... Если это нетолько дополнительный разделитель. Тогда это раздето.Чего ждать?

$ echo 'foo.c:42:case RED:' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED

Bash, ksh93 и dash все делают это, так что я предполагаю, что это стандартное поведение POSIX.

Почему это происходит?Какая лучшая альтернатива?

Я хочу разбить строки выше на три переменные, и я не хочу искажать любой текст в третьем поле. я думалread был способ пойти, но теперь я пересматриваю.

Ответы на вопрос(2)

Ваш ответ на вопрос