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