【问题标题】:How to use eval to read variables [duplicate]如何使用eval读取变量[重复]
【发布时间】:2025-12-18 16:40:01
【问题描述】:

这是场景: 假设我设置了位置变量:

set 1 2 3 4
eval "args_$1=something"

如何读取 args_1,args_2,args_3... 变量 我试过了

echo $args_$1

这也不起作用

eval "\$$(echo arg_$1)"

如何获取 $arg_1 的值,在终端上显示或传递给函数等。

【问题讨论】:

  • 不推荐使用 eval 但可以尝试:set 1 2 3 4;评估 arg_$1=koba; eval echo $`echo arg_$1`
  • 顺便说一句,我最强烈赞同链接问题的答案是*.com/a/16973754/14122——在这里给出的情况下,它的意思是printf -v "$args_$1" %s value
  • ...但实际上,请阅读 BashFAQ #6 以获得比 * 上可用的更完整的答案/方法集。

标签: linux bash shell


【解决方案1】:

没有评估:

$ set 1 2 3 4
$ var="args_$1"
$ declare "$var=foo"
$ echo "$var"
args_1
$ echo "${!var}"
foo

这使用indirect variable

【讨论】:

    【解决方案2】:
    $ set 1 2 3 4; eval arg_$1=koba; eval echo $`echo arg_$1`
    koba
    

    PS:不推荐使用 eval。

    【讨论】:

    • 请你分享一下其他的方法