Mint
Mint

Reputation: 16007

Can't read variable that was stored from within a while loop, when out of the while loop

I can't for the life of me see why I can not read the postPrioity outside the while loop. I tried "export postPrioity="500"" still didn't work.

Any ideas?

-- or in plan text --

#!/bin/bash
cat "/files.txt" | while read namesInFile; do   
            postPrioity="500"
            #This one shows the "$postPrioity" varible, as '500'
            echo "weeeeeeeeee ---> $postPrioity <--- 1"
done
            #This one comes up with "" as the $postPrioity varible. GRRR
            echo "weeeeeeeeee ---> $postPrioity <--- 2"

OUTPUT: (I only have 3 file names in files.txt)

weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee --->  <--- 2

Upvotes: 1

Views: 4222

Answers (3)

cdarke
cdarke

Reputation: 44414

Alternatively use process substitution:

while read line
do    
    variable=value  
done < <(command)

Upvotes: 1

Idelic
Idelic

Reputation: 15582

As a complement to Philipp's response, in case you MUST use a pipe (and as he pointed out, in your example you don't need cat), you can put all the logic in the same side of the pipe:


command | {
  while read line; do
    variable=value
  done
  # Here $variable exists
  echo $variable
}
# Here it doesn't

Upvotes: 7

Philipp
Philipp

Reputation: 49850

The pipe operator creates a subshell, see BashPitfalls and BashFAQ. Solution: Don't use cat, it's useless anyway.

#!/bin/bash
postPriority=0
while read namesInFile
do   
    postPrioity=500
    echo "weeeeeeeeee ---> $postPrioity <--- 1"
done < /files.txt
echo "weeeeeeeeee ---> $postPrioity <--- 2"

Upvotes: 9

Related Questions