さて、Bashを扱う際に問題があり、グローバル変数が不足しています。私が抱えている問題は、whileループの中で、forループを実行する必要があり、そのループのためにスクリプトを呼び出すことになり、変数$ NAMEを動的に変更する必要があるということです。残念ながら、いくつかのオプションを試してみるまで、私はそれが何であるか分かりません。変数は、元のプロセスで設定された後は変更したくないということです。私は今日これについて多くの研究を行ってきましたが、そのようなファイルでファイルを読むとサブシェルが開き、親プロセスで値を編集できないことがわかりました。私は変数を動的にエクスポートするためにソースにいくつかのファイルを作成しようとしましたが、どちらもうまくいきません。サブプロセスの値をBashで編集しますか?
編集:この例はトリビアルですが、私は仕事で使っているのと同じ論理です。作業コードを表示することはできません。
#!/usr/bin/env bash
FILE=$1
SCRIPT="FOO"
NAME="TEST"
#create script
cat > "${SCRIPT}" <<EOF
HELLO WORLD, $NAME
EOF
while read line; do
echo $line
echo $SCRIPT
for i in `seq 1 10`; do
(
NAME="MEGAMAN"
echo $NAME
)
done
done < "$FILE"
#echo $NAME
cat > "${SCRIPT}" <<EOF
HELLO WORLD, $NAME
EOF
マイ出力:
[email protected]:~/workspace/Script $ ./Main FOO
HELLO WORLD, TEST
FOO
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN
MEGAMAN **this output is fine
、ファイルはそれが出力:
HELLO WORLD, TEST **This file should say MEGAMAN.
によって "グローバル変数の欠如" をライン
を交換?ハァッ? **すべての**変数は、そうでないと宣言しない限り、bashでグローバルです。 –
...あなたの問題は、サブプロセスでコードを実行しているので、そこに設定したグローバル変数は、そのサブプロセスが終了するとクリアされます。 [BashFAQ#24](http://mywiki.wooledge.org/BashFAQ/024)も参照してください。サブプロセスをフォークする場合は、他の言語のグローバルと同じです。 –
...最も簡単な解決策は、変数を設定するコードがインプロセスであることを保証することです。 '()'を '{}'に置き換えた場合、あなたは設定されます。 –