निम्नलिखित कार्यक्रम में, अगर मैं $foo
पहले if
कथन के अंदर मान 1 के लिए चर सेट करता हूं, तो यह इस अर्थ में काम करता है कि इसका मान यदि कथन के बाद याद किया जाता है। हालाँकि, जब मैंने उसी वैरिएबल को वैल्यू 2 के अंदर सेट किया, if
जो कि while
स्टेटमेंट के अंदर है , तो while
लूप के बाद इसे भूल जाते हैं । यह ऐसा व्यवहार कर रहा है जैसे मैं लूप के $foo
अंदर चर की किसी प्रकार की प्रतिलिपि का उपयोग कर रहा हूं while
और मैं केवल उस विशेष प्रति को संशोधित कर रहा हूं। यहां पूरा परीक्षण कार्यक्रम है:
#!/bin/bash
set -e
set -u
foo=0
bar="hello"
if [[ "$bar" == "hello" ]]
then
foo=1
echo "Setting \$foo to 1: $foo"
fi
echo "Variable \$foo after if statement: $foo"
lines="first line\nsecond line\nthird line"
echo -e $lines | 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 "Variable \$foo after while loop: $foo"
# Output:
# $ ./testbash.sh
# Setting $foo to 1: 1
# Variable $foo after if statement: 1
# Value of $foo in while loop body: 1
# Variable $foo updated to 2 inside if inside while loop
# Value of $foo in while loop body: 2
# Value of $foo in while loop body: 2
# Variable $foo after while loop: 1
# bash --version
# GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
SC2030: Modification of foo is local (to subshell caused by pipeline).