J'ai une commande renvoyant plusieurs lignes. Pour un traitement ultérieur, je dois traiter chaque ligne unique de ces lignes.
Mon code actuel fonctionne en modifiant l'IFS ( séparateur de champ interne ):
ROWS=$(some command returning multiple lines)
O=$IFS #save original IFS
IFS=$(echo -en "\n\b") # set IFS to linebreak
for ROW in ${ROWS[@]}
do
echo "$ROW"
done
IFS=$O #restore old IFS
Je me demande, y a-t-il un meilleur moyen d'accéder aux lignes simples de la sortie de plusieurs lignes, une sans modifier l'IFS? Surtout la lisibilité de mon script se dégrade en modifiant l'IFS.
Mise à jour: j'ai du mal à faire fonctionner les réponses, par exemple celle de choroba:
while IFS= read -r line ; do
let var+=line #line 42
done << $(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")
echo "$var" # line 44
Donne moi
./bla.sh: row 44: Warning: here-document at line 43 delimited by end-of-file (wanted `$(sqlite3 -list -nullvalue NULL -separator , /var/log/asterisk/master.db ${QUERY})')
./bla.sh: row 42: let: echo "": syntax error: invalid arithmetic operator. (error causing character is \"""\").
N'importe qui peut m'aider avec ça? Merci!
< <(some command returning multiple lines)
, mais ce n'est pas ce que vous faites.