csh脚本中动态调用变量报错‘bad substitution’,求正确实现方式
在csh中动态访问带前缀变量(解决"bad substitution"错误)
你遇到的问题核心是csh不支持bash/zsh那种嵌套变量替换语法,你写的${qvs_${var}}是bash专属特性,csh无法识别,所以会抛出"bad substitution"错误。下面是适配csh环境的正确实现:
# 加载源文件 source lib_file.csh # 读取待处理变量列表(csh中用cat读取文件内容) set vars = `cat variables_to_process.txt` # 遍历每个变量后缀 foreach var ($vars) # 用eval动态解析变量名 eval echo \$qvs_${var} end
关键改动说明:
- 文件读取方式:csh不支持
$(<variables_to_process.txt)这种bash语法,改用set vars =cat variables_to_process.txt``将文件内容读取到变量列表中。 - 循环语法:csh中遍历列表要用
foreach关键字,而bash的for在csh里是用于数字范围循环的(比如for i in 1..10),不能直接用来遍历字符串列表。 - 动态变量解析:通过
eval命令处理动态构造的变量名:\$qvs_${var}中的反斜杠转义第一个$,让csh先展开${var}得到var1/var3,此时字符串变成$qvs_var1/$qvs_var3;- 再由
eval执行这个字符串,最终解析出对应的变量值并输出。
运行这个脚本后,就能得到预期的输出:
ABC1 LNE5
内容的提问来源于stack exchange,提问作者WX_M
相关产品推荐
相关产品推荐

