【问题标题】:Value of var is not shown when concatenating $ and var --> $var [duplicate]连接 $ 和 var 时不显示 var 的值 --> $var [重复]
【发布时间】:2019-02-03 14:36:30
【问题描述】:

到目前为止,我已经有一天的 bash 经验..

string () {
    for (( i=0; i<${#1}; i++ ))
    do
        echo "$"${1:$i:1}""
    done
}


string "hello"

此脚本返回“$h”、“$e”、“$l”、“$l”、“$o”、 但我实际上希望它返回变量hello 的内容。

我该怎么做?

【问题讨论】:

    标签: bash parameter-expansion


    【解决方案1】:

    你需要使用间接参数扩展:

    for ((i=0; i<${#1}; i++)); do
        t=${1:i:1}
        echo "${!t}"
    done
    

    ${!t}$t 的值,并将其视为要扩展的参数名称。

    【讨论】:

    • 请注意,这只适用于 bash。 zsh 等价于 ${(P)t}
    • 该问题仅标记为bash。我们不需要为每个其他 shell 提供相关语法。
    • 是的,你是对的。但它会帮助正在使用 zsh 并在谷歌搜索相同问题时遇到此页面的人。
    【解决方案2】:

    使用eval 安全地编写一系列echos 以输出bash 参数转换 赋值语句的单行器,使用GNU grep划分输入字符串:

    h=foo o=bar
    string() { eval $(printf 'echo ${%s@A};\n' $(grep -o . <<< "$@" )) ; }
    string hello
    

    输出,(空白行代表未设置的变量$e$l):

    h='foo'
    
    
    
    o='bar'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多