Bash 是否可以在变量名中替换字符串?

Bash 是否可以在变量名中替换字符串?,bash,substitution,Bash,Substitution,我有三个这样的阵列: bp_hl_测试=(“HL05”“HL10”“HL15”) bp_lr_测试=(“LR001”“LR010”“LR100”) bp\U mr\U测试=(“MR001”“MR010”“MR100”) 例如,我想删除上面的数组是子目录的目录: - results -- bp --- hl ---- HL05 ---- HL10 ---- HL15 ---- HL20 --- lr ---- LR001 ---- LR010 ---- LR100 --- mr ---- MR0

我有三个这样的阵列:

bp_hl_测试=(“HL05”“HL10”“HL15”)
bp_lr_测试=(“LR001”“LR010”“LR100”)
bp\U mr\U测试=(“MR001”“MR010”“MR100”)
例如,我想删除上面的数组是子目录的目录:

- results
-- bp
--- hl
---- HL05
---- HL10
---- HL15
---- HL20
--- lr
---- LR001
---- LR010
---- LR100
--- mr
---- MR001
---- MR010
---- MR100
我使用的一些代码如下:

“${bp_hl_test[@]}”中i的
;做
rm-rf../results/bp/hl/${i}
完成
对于“${bp_lr_test[@]}”中的i;做
rm-rf../results/bp/lr/${i}
完成
对于“${bp_mr_test[@]}”中的i;做
rm-rf../results/bp/mr/${i}
完成
这正是我想要的,但我想知道我是否可以缩短这一点,并再次使用一位代码

bp_测试={“hl”“lr”“mr”)
bp_hl_测试=(“HL05”“HL10”“HL15”)
bp_lr_测试=(“LR001”“LR010”“LR100”)
bp\U mr\U测试=(“MR001”“MR010”“MR100”)
对于“${bp_test[@]}”中的j,请执行以下操作
对于“${bp{j}{u test[@]}”中的i
rm-rf../results/bp/${j}/${i}
完成
完成
这不起作用,因为据我所知,我不能在这样的变量名中进行替换。有什么方法可以做到这一点吗

我已经看了带标签的问题,它给了我
错误替换
错误:

“${bp_test[@]}”中j的
;do
对于“${bp\${!j}{u test[@]}”中的i
rm-rf../results/bp/${j}/${i}
完成
完成

您可以在临时数组中破解该数组

for j in "${bp_test[@]}"; do
   a=( $(set | sed -rn '/^bp_'"${j}"'_test=/ s/[^"]*"([^"]*")/"\1 /gp'| sed 's/)$//') )
   for i in "${a[@]}"; do
       echo rm -rf ../results/bp/${j}/${i}
   done
done

您可以在临时数组中破解该数组

for j in "${bp_test[@]}"; do
   a=( $(set | sed -rn '/^bp_'"${j}"'_test=/ s/[^"]*"([^"]*")/"\1 /gp'| sed 's/)$//') )
   for i in "${a[@]}"; do
       echo rm -rf ../results/bp/${j}/${i}
   done
done

请您使用
-n
选项来
声明
,尝试以下操作:

bp_test=("hl" "lr" "mr")
bp_hl_test=("HL05" "HL10" "HL15")
bp_lr_test=("LR001" "LR010" "LR100")
bp_mr_test=("MR001" "MR010" "MR100")

for j in "${bp_test[@]}"; do
    declare -n ary="bp_${j}_test"
    for i in "${ary[@]}"; do
        echo rm -rf -- ../results/bp/"${j}/${i}"
    done
done

如果它看起来不错,请放下
回音

请使用
-n
选项尝试以下操作以
声明

bp_test=("hl" "lr" "mr")
bp_hl_test=("HL05" "HL10" "HL15")
bp_lr_test=("LR001" "LR010" "LR100")
bp_mr_test=("MR001" "MR010" "MR100")

for j in "${bp_test[@]}"; do
    declare -n ary="bp_${j}_test"
    for i in "${ary[@]}"; do
        echo rm -rf -- ../results/bp/"${j}/${i}"
    done
done

如果它看起来不错,请删除
echo

它应该是
${!bp_${j}{u test}
。但是,不能将其用于数组变量。请参阅,它应该是
${!bp_${j}{u test}
。但是,不能将其用于数组变量。请参阅