2012-04-30 63 views
0

下面是示例代碼,我可以在bash腳本中替換數組名稱嗎?

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中使用變量「」板凳「」訪問network_dir和telecomm_dir?謝謝!

回答

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 
+0

你救我的天!乾杯! :) – chenwj

相關問題