You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:00