Mac平台Bash脚本中通过循环动态拼接变量名实现内容匹配的可行性咨询
在Mac Bash中实现动态变量匹配的精简方案
没问题,这个需求在Mac的Bash环境里完全可以实现,而且不用写一堆elif语句,核心就是搞定动态变量名的引用问题。下面给你两种简单可行的方案:
方案一:使用Bash间接引用(推荐)
Bash支持间接引用语法${!变量名},可以通过变量存储的字符串来引用对应的变量值,非常适合你的场景:
# 先定义你的变量 var1="ABC" var2="CDF" var3="EFG" var4="HIJ" var5="KLM" var6="NOP" var7="QRS" A="Monday CDF Day" # 循环1到7 for i in {1..7}; do # 拼接动态变量名,比如i=2时,dynamic_var就是"var2" dynamic_var="var$i" # 间接引用获取变量值 current_value=${!dynamic_var} # 判断A是否包含当前变量的值 if [[ "$A" == *"$current_value"* ]]; then # 匹配成功就写入文件并退出循环 echo "$current_value" > whatsmyvar.txt exit 0 fi done
关键说明:
${!dynamic_var}:当dynamic_var的值是var2时,这个语法会自动取出var2的内容CDF,完美实现动态变量名的取值。exit 0:匹配到第一个符合条件的变量就立即退出循环,避免不必要的迭代。
方案二:使用eval命令
如果你习惯用eval,也可以通过它来动态解析变量名,不过要注意eval会执行任意命令,确保你的变量内容是安全的:
# 同样先定义变量 var1="ABC" var2="CDF" var3="EFG" var4="HIJ" var5="KLM" var6="NOP" var7="QRS" A="Monday CDF Day" for i in {1..7}; do # 通过eval动态获取变量值,\$是为了避免提前展开 eval "current_value=\$var$i" if [[ "$A" == *"$current_value"* ]]; then echo "$current_value" > whatsmyvar.txt exit 0 fi done
关键说明:
eval "current_value=\$var$i":当i=2时,这条命令会被解析为current_value=$var2,从而把var2的值赋值给current_value。
两种方案都能满足你的需求,个人更推荐第一种间接引用的方式,代码更清晰,也更安全。
内容的提问来源于stack exchange,提问作者MikeT
相关产品推荐
相关产品推荐

