)?
нализа полей, разделенных двоеточиями, я могу использовать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
был способ пойти, но теперь я пересматриваю.