Shell lê * algumas vezes * delimitador à direita
Para analisar campos delimitados por dois pontos, posso usarread
com um costumeIFS
:
$ echo 'foo.c:41:switch (color) {' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 41 | switch (color) {
Se o último campo contiver dois pontos, não há problema, os dois pontos serão retido
$ echo 'foo.c:42:case RED: //alert' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED: //alert
Um delimitador à direita também é mantido ...
$ echo 'foo.c:42:case RED: //alert:' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED: //alert:
... A menos que seja os delimitador extra. Então é despojado.Espere o que
$ echo 'foo.c:42:case RED:' | { IFS=: read file line text && echo "$file | $line | $text"; }
foo.c | 42 | case RED
Bash, ksh93 e dash fazem isso, então acho que é o comportamento padrão do POSI
Por que isso acontece? Qual é a melhor alternativa?Eu quero analisar as strings acima em três variáveis e não quero alterar nenhum texto no terceiro campo. Eu penseiread
era o caminho a seguir, mas agora estou reconsiderando.