Variabler i whileslingor
Jump to navigation
Jump to search
Variabler i whileslingor
Variabler i whileslingor exekveras i ett subshell och kommer inte att bevaras när whileslingan avslutas. Därför kan man använda en "here string" där bara en del exekveras i ett subshell.
Normalt ser en whileslinga ut t ex så här:
echo -e $lines | while read line ... done
Genom att flytta det initiala kommandot, "echo -e $lines" i detta fall, efter done och föregå det med <<< exekveras enbart "echo -e $lines" i ett subshell. Den färdiga koden ser då ut så här (variabeln $foo behåller nu sitt värde efter whileslingan):
while read line
do
if [[ "$line" == "second line" ]]
then
foo=2
echo "Variable \$foo updated to $foo inside if inside while loop"
fi
echo "Value of \$foo in while loop body: $foo"
done <<< "$(echo -e "$lines")"
Ett annat exempel:
x=0 while read v do x=$(( $x + 1 )) done <<< "$(ls -d /etc)"
x behåller här sitt värde efter whileslingan, dvs i detta fall antalet filer/kataloger i /etc