No Bash, estou lendo os campos de uma linha em uma matriz. Deixe-me enfatizar que o desempenho é um problema, então não posso pagar nada que gere subprocessos.
Para tornar o código mais legível, quero os campos em variáveis: $width
é mais legível que ${array[0]}
. Eu tenho que definir manualmente cada variável, assim, que é muita repetição:
while read line; do
array=($line)
width=${array[0]}
height=${array[1]}
size=${array[2]}
date=${array[3]}
time=${array[4]}
# use $width, $height, etc. in script
done < file
Existe alguma maneira compacta de fazer isso, como a list
diretiva em PHP?
list($width, $height, $size, $date, $time) = $array;
Sim:
Isso lerá a entrada padrão e dividirá os dados em espaços em branco (espaços ou tabulações). A última variável obterá quaisquer dados que "sobrarem" (se houver mais campos do que variáveis lidas). Isso é em vez de ler na variável
line
.Usei nomes de variáveis
thedate
ethetime
em vez dedate
etime
que são nomes de utilitários.Para dividir a linha apenas em tabulações , defina
IFS
uma tabulação pararead
:Veja também: