【问题标题】:echo value inside a variable?变量内的回显值?
【发布时间】:2010-06-09 15:37:30
【问题描述】:

x=102 y=x

表示当我回显 $y 时它给出 x 回声$y x -- 而不是 102

当我回显 $x 时它给出 102

可以说我不知道​​ y 里面是什么

我希望 x 的值与使用 y 类似这样的东西相呼应

a=`echo $(echo $y)`
echo $a

答案 102

【问题讨论】:

  • 如果你使用的是bash,那么echo ${!y}
  • 这对我有用 echo $(($y))
  • 如果 x 是数字则有效,因为 $(( )) 是算术扩展。如果 x 是任意字符串,它将给出 0。
  • @KennyTM - 这是一个有趣的功能。你知道什么 bash 调用该功能,以便我可以了解更多信息吗?
  • @R Samuel Klatchko:“间接”

标签: unix shell scripting ksh


【解决方案1】:

您需要告诉 shell 两次评估您的命令——一次将 $y 转换为 x,再次获取 $x 的值。我知道的最便携的方法是使用 eval:

$ /bin/sh
$ x=100
$ y=x
$ echo $y
x
$ eval echo \$$y
100
$

(您需要转义 eval 行中的第一个 $,否则第一个评估将用当前 pid 替换“$$”)

如果你只关心 bash,Ken​​nyTM 的方法可能是最好的。

【讨论】:

    【解决方案2】:

    在 ksh 93 中(我不知道这是否适用于 ksh 88):

    $ x=102; typeset -n y=x
    $ echo $x
    102
    $ echo $y
    102
    $ echo ${!y}
    x
    

    令人困惑的是,最后两个命令的作用与它们在 Bash 中的作用相反(不需要使用 typeset 标记变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2022-07-17
      • 2012-09-09
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多