【问题标题】:how do i create a variable from the output of another in bash如何从 bash 中另一个的输出创建一个变量
【发布时间】:2011-10-29 11:53:18
【问题描述】:

这是一个示例脚本,它不能按我的预期工作:

#!/bin/bash
for dynamic in a b c; do
  myvar=$dynamic

  export $myvar="hi"

  echo $(eval "$myvar")
  echo $dynamic
done

我希望输出是:

hi

a

hi

b

hi

c

有什么想法吗?我愿意偏离这种方法,但我绝对希望能够创建一个从算法的输出命名的变量。在这种情况下,它只是一个 for 循环。

【问题讨论】:

    标签: bash variables dynamic eval


    【解决方案1】:

    eval 有导致错误的倾向,所以尽可能避免它;在这种情况下,使用 ${!metavariable} 的间接扩展会更简洁:

    #!/bin/bash
    for dynamic in a b c; do
      myvar=$dynamic
    
      export $myvar="hi"
    
      echo ${!myvar}
      echo $dynamic
    done
    

    【讨论】:

      【解决方案2】:

      以下是您的程序的修复程序。有两件事你错了: 首先是声明变量时不需要'$'。 第二个是调用 eval 会将 myvar 的内容当作一个 shell 脚本。但是,您没有在任何地方将“hi”定义为命令。

       for dynamic in a b c; do
           myvar=$dynamic
      
      -    export $myvar="hi"
      +    export myvar="hi"
      
      -    echo $(eval "$myvar")
      +    echo "$myvar"
           echo $dynamic
       done
      

      【讨论】:

      • 我认为你错过了这个问题的目的。我认为 OP 想要类似于 PHP 的变量变量。
      【解决方案3】:

      尚不完全清楚这就是您要寻找的东西,但我认为您想要类似的东西:

      #!/bin/sh 一个=一个 b=B c=C 因为 i 在 a b c 中;做 评估 $i=value_$i 评估回声 \$$i 完毕 echo $a # 打印“value_a”

      【讨论】:

      • 是的,先生。你搞定了。虽然我不需要上述任何声明,a=A 等……但这基本上就是我想要的。从字面上解释 $,然后评估它加上 $i 的回声。非常聪明。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多