揮発性のメモ2

http://d.hatena.ne.jp/iww/

bashで whileの中でevalを使う

for文で出来る

for x in A=hoge B=piyo; do
    eval $x
done

echo A=$A
echo B=$B
A=hogeA
B=hogeB

while文でこう書くとアウト

echo -e "A=hoge\nB=piyo" | while read x; do
    eval $x
done
A=
B=

なぜなら、パイプを使っているから。
サブシェルになるので変数はどっか行ってしまう

while文でやりたいときは、どうにかパイプを使わずに直接食わせれば良い

while read x; do
    eval $x
done < <(echo -e "A=hoge\nB=piyo")
while read x; do
    eval $x
done << __EOF__
A=hoge
B=piyo
__EOF__


参照:
bash - Why can't I eval inside a while loop? - Stack Overflow
eval でハマった話 : ミヤタ コウヘイ@エンジニア | PRESS [プレス] : Instagram [インスタグラム] を利用したブログサービス
shell - While-loop subshell dilemma in Bash - Stack Overflow
シェルスクリプトのwhile文の中の変数を外で使う方法 - Qiita