Bash while 文の中の変数が外で使えなくて困った話
解説用のコードなので、どんなときに使うんだというツッコミは無しの方向で。
奇数の ID が振られているアルファベットを表示したい
先に理由
while
でぐるぐる回すときにはパイプを使っていろいろなものを読み込ませることが多い (個人的には) ですが、パイプを使うとその時点でサブシェルができてしまい、変数のスコープがサブシェルに行くからの模様。
なので、パイプを使わないようにして読み込ませると、ループの中で書き換えた変数が外で使えます。
動かないコード
while1.sh
#!/bin/bash -u
readonly settings=$(cat << EOS
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
EOS
)
target=""
echo "${settings}" | while read number alphabet
do
if [ $(( number % 2 )) -eq 0 ]; then
target=$( echo -e "${target}\n${alphabet}" )
fi
done
echo "${target}"
$ bash ./while.sh
$
動くコード
while2.sh
#!/bin/bash -u
readonly settings=$(cat << EOS
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
EOS
)
target=""
while read number alphabet
do
if [ $(( number % 2 )) -eq 0 ]; then
target=$( echo -e "${target}\n${alphabet}" )
fi
done << EOI
${settings}
EOI
echo "${target}"
$ bash ./while.sh
B
D
F
H
$
Author And Source
この問題について(Bash while 文の中の変数が外で使えなくて困った話), 我々は、より多くの情報をここで見つけました https://qiita.com/terra_yucco/items/0b63a1d7b3e287f804fd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .