0

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

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


string "hello"

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

我怎么做?

4

2 回答 2

1

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

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

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

于 2019-02-03T14:45:53.920 回答
0

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'
于 2019-02-04T05:57:04.617 回答