bash - 是否可以在变量名中替换字符串?
问题描述
我有三个这样的数组:
bp_hl_test=("HL05" "HL10" "HL15")
bp_lr_test=("LR001" "LR010" "LR100")
bp_mr_test=("MR001" "MR010" "MR100")
例如,我想删除上述数组是子目录的目录:
- results
-- bp
--- hl
---- HL05
---- HL10
---- HL15
---- HL20
--- lr
---- LR001
---- LR010
---- LR100
--- mr
---- MR001
---- MR010
---- MR100
我正在使用的一些代码如下:
for i in "${bp_hl_test[@]}"; do
rm -rf ../results/bp/hl/${i}
done
for i in "${bp_lr_test[@]}"; do
rm -rf ../results/bp/lr/${i}
done
for i in "${bp_mr_test[@]}"; do
rm -rf ../results/bp/mr/${i}
done
这可以满足我的要求,但我想知道是否可以缩短它并多次重用代码。
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
for i in "${bp_${j}_test[@]}"; do
rm -rf ../results/bp/${j}/${i}
done
done
这不起作用,因为据我所知,我不能在这样的变量名中替换。有没有办法做到这一点?
我查看了标记的问题,它给了我bad substitution
错误:
for j in "${bp_test[@]}"; do
for i in "${bp_${!j}_test[@]}"; do
rm -rf ../results/bp/${j}/${i}
done
done
解决方案
请您尝试以下-n
选项declare
:
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
.
推荐阅读
- javascript - 如何在 Twilio 可编程聊天中收听来自多个频道的新消息?
- micronaut - 如何将 Bean 定义为“RestTemplate”?
- wordpress - 如何以折扣 > 2% 展示特价商品
- debugging - uVision Keil STM32调试“***错误57:非法地址(0x08000000)”时出错
- java - install4j 在安装过程中抛出错误消息
- reactjs - 如何从自定义子组件调用父函数?
- github - GITHUB 推送问题
- ruby - E: 无法定位软件包 libsqli
- html - 如何将子菜单向右对齐
- sql - 使用 ROW_NUMBER() 对数据集进行分区