Variabler i whileslingor

From Linuxwiki
Revision as of 17:03, 11 May 2026 by Linadmin (talk | contribs) (3 revisions imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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