0

以下はサンプルコードです。

top_dir=(network_dir telecomm_dir)
network_dir=(dijkstra patricia)
telecomm_dir=(CRC32 FFT adpcm gsm)

for bench in ${top_dir[@]}; do
  for subdir in ${$bench[@]}; do
    make -C $subdir
  done
done

私が持っているのは2つのディレクトリで、それぞれにサブディレクトリがあります。各ディレクトリを繰り返して実行したいmake。このスクリプトを実行すると、エラー メッセージが表示されます。

./run.sh: line 21: ${$bench[@]}: bad substitution

bash に変数 ''bench'' を使用させて network_dir と telecomm_dir にアクセスさせることは可能ですか? ありがとう!

4

1 に答える 1

1

1 つのオプションは、逆参照を使用することです

top_dir=(network_dir telecomm_dir)
network_dir=(dijkstra patricia)
telecomm_dir=(CRC32 FFT adpcm gsm)

for bench in "${top_dir[@]}"; do
  arr="${!bench}"
  for subdir in "${arr[@]}"; do
    make -C "$subdir"
  done
done

また、より多くの引用符を使用してください


別のオプションは、連想配列を使用することです。

declare -A dirs=(
    [network_dir]="dijkstra patricia"
    [telecomm_dir]="CRC32 FFT adpcm gsm"
)

for bench in "${!dirs[@]}"; do
    for subdir in ${dirs[$bench]}; do  # requires subdirs with no spaces
        make -C "$subdir"
    done
done
于 2012-04-30T12:18:12.303 に答える