Por padrão, read
somente lerá uma linha por vez . Por exemplo, aqui fornecemos três linhas de entrada e, como você pode ver, read
apenas lê a primeira linha:
$ IFS=$'\n' read -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a")'
A opção -d
pode ser usada para alterar esse comportamento. Por exemplo:
$ IFS=$'\n' read -d '' -ra displays <<< $'a\nb\nc\n'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")
Aqui, -d ''
foi usado. Isso informa read
para ler até encontrar um caractere NUL. Como nunca pode haver um caractere NUL em uma string bash, isso faz com que ele leia toda a entrada que fornecemos com a string here.
Usando%
$ IFS=% read -ra displays <<< 'a%b%c'; declare -p displays
declare -a displays='([0]="a" [1]="b" [2]="c")'
Usar %
funciona porque read
continua lendo além de %
. Por padrão, ele só pára para caracteres de nova linha.
Outro
Considera-se práticas recomendadas usar nomes com letras maiúsculas ou minúsculas para suas variáveis. O sistema usa nomes de letras maiúsculas e você não quer sobrescrever acidentalmente um deles. Por exemplo, DISPLAY
é uma variável do sistema e muitos problemas desagradáveis podem ocorrer se forem sobrescritos.