【问题标题】:How to echo a variable (name of which contains another varibale)如何回显一个变量(其名称包含另一个变量)
【发布时间】:2022-01-12 08:16:49
【问题描述】:

我正在编写一个小的 shell 脚本来读取和打印 一个文件。

#!/bin/csh

set IN_FILE=$1
set i=1
foreach line ( "`cat $IN_FILE`" )
  set F$i="`echo $line`"
  echo ${F${i}}
  @ i = $i + 1
end

执行时出现以下错误

Missing '}'.

我想知道如何回显一个变量,其中包含 名称中的另一个变量。

【问题讨论】:

  • 尝试使用 eval?在 bash 中,尝试“帮助评估”。
  • eval ${F${i}} 给出了同样的错误。
  • 记住总是引用。你将什么参数传递给你的脚本?
  • 您可以使用echo ${!i},请参阅:stackoverflow.com/a/18124325/724039(或者仅此 bash 吗?)
  • @linuxfansaysReinstateMonica 我正在传递一个文件的名称,它必须读取并打印每一行

标签: shell echo csh


【解决方案1】:

我没有 csh,所以用 bash 试试这个。 test.sh 的内容是:

i=1
eval "F$i=\"this is a line\""
eval echo "test: " \${F$i}
echo "F1 is" $F1

它似乎有效:

 /tmp$ ./test.sh
 test: this is a line
 F1 is this is a line

【讨论】:

    【解决方案2】:

    在此处找到一个示例:https://www.unix.com/shell-programming-and-scripting/275206-issue-nesting-variables-csh.html 并尝试将其改编为您的脚本

    试试:

    #!/bin/csh
    
    set IN_FILE=$1
    set i=1
    set j=1
    foreach line ( "`cat $IN_FILE`" )
      #set F$i="`echo $line`"
      #echo ${F${i}}
      set test=( F${i} )
      echo "$test[$j]"
      @ i = $i + 1
    end
    

    在这里找到了一个例子:https://www.unix.com/shell-programming-and-scripting/275206-issue-nesting-variables-csh.html

    并尝试使其适应您的脚本

    【讨论】:

      【解决方案3】:

      修复它。

      #!/bin/csh
      
      set IN_FILE=$1
      set i=1
      foreach line ( "`cat $IN_FILE`" )
        eval "set F$i='`echo $line`'"
        eval echo \${F$i}
        @ i = $i + 1
      end
      

      非常感谢 linuxfan 的提示

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多