如何在csh脚本中正确输出名称包含另一变量的动态变量?
报错原因
csh 本身不支持直接嵌套变量替换语法,你写的 ${F${i}} 不符合 csh 的变量解析规则,因此会抛出Missing '}错误。
核心问题解决方法
要读取名称由另一个变量拼接而成的变量值,使用eval命令即可。eval会先完成变量的展开再执行后续指令,你要打印F$i对应值的正确写法为:
eval echo \$F$i
修正后的原脚本
#!/bin/csh set IN_FILE=$1 set i=1 foreach line ( "`cat $IN_FILE`" ) set F$i="`echo $line`" eval echo \$F$i @ i = $i + 1 end
补充说明
- 如果你只是需要逐行打印文件内容,不需要额外存储每一行到变量的话,可以直接简化脚本,避免动态变量的使用:
#!/bin/csh set IN_FILE=$1 foreach line ("`cat $IN_FILE`") echo "$line" end - 原脚本的
foreach写法如果遇到包含空格、制表符的行,会出现内容拆分异常,要严格按行读取可以参考以下实现:#!/bin/csh set IN_FILE = $1 set i = 1 while ( $i <= `wc -l < $IN_FILE` ) set line = "`sed -n ${i}p $IN_FILE`" set F$i = "$line" eval echo \$F$i @ i++ end
内容的提问来源于stack exchange,提问作者JohnP
相关产品推荐
相关产品推荐

