BASH中如何通过变量$left获取file3_L对应的文件路径值?
Bash变量间接引用问题解决方法
你遇到的是bash中的变量间接引用场景:$left只会输出变量left存储的字符串值file3_L,而不会自动将这个字符串当作变量名去解析它对应的内容。要实现通过left获取file3_L的路径,有以下几种方法:
方法1:使用原生间接引用语法 ${!var}
这是bash 2.0及以上版本支持的安全写法,直接通过特殊语法解析变量名对应的变量值:
doc_path="/Users/joeblogs/My Files/Documents/" file3_L="$doc_path/txt/Testfile.txt" n=3 left="file${n}_L" # 获取目标路径 target_path=${!left} echo $target_path # 输出:/Users/joeblogs/My Files/Documents/txt/Testfile.txt
方法2:使用eval命令
eval会重新解析命令内容,实现间接引用,但注意eval存在注入风险,若left的值不可信需谨慎使用:
# 直接输出 eval echo \$$left # 或者赋值给变量 eval "target_path=\$$left" echo $target_path
方法3:使用命名引用(bash 4.3+)
通过declare -n定义命名引用,让变量成为目标变量的别名:
declare -n ref=$left echo $ref # 直接输出file3_L的路径 # 使用完成后建议取消引用 unset -n ref
内容的提问来源于stack exchange,提问作者TheEngineer
相关产品推荐
相关产品推荐

