1

なぜこれが機能するのか知りたい:

arr=()
fun() { arr[$1]=$2; }
fun 1 2
echo ${arr[1]}
# echoes '2'

しかし、これはしません:

arr=()
fun() { arr[$1]=$2; }
fun 1 2 &
wait
echo ${arr[1]}
# echoes a blank line
4

2 に答える 2

2

2 番目の例でバックグラウンドで実行funすることにより、サブシェルで実行します。サブシェルで行われた配列への変更は、 の値をエコーする親シェルには表示されませんarr[1]

于 2012-07-31T14:05:04.053 に答える
0

関数を非同期で実行すると、親コンテキストの環境を変更できない新しいシェル コンテキストが作成されるため、これは機能しません。これは、制御構造内で変更された変数がパイプの外側の親では変更されない、制御構造へのパイプとよく似ています。

于 2012-07-31T14:09:58.510 に答える