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

我有两个目录,每个目录都有子目录。我想迭代每个目录并执行make. 当我运行这个脚本时,它给了我错误信息,

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

是否可以让 bash 使用变量“bench”来访问 network_dir 和 telecom_dir?谢谢!

4

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 回答