到目前为止,我已经有大约一天的 bash 经验..
string () {
for (( i=0; i<${#1}; i++ ))
do
echo "$"${1:$i:1}""
done
}
string "hello"
此脚本返回“ $h
”、“ $e
”、“ $l
”、“ $l
”、“ ” ,$o
但我实际上希望它返回变量的h
内容e
、、、l
和。l
o
我怎么做?
到目前为止,我已经有大约一天的 bash 经验..
string () {
for (( i=0; i<${#1}; i++ ))
do
echo "$"${1:$i:1}""
done
}
string "hello"
此脚本返回“ $h
”、“ $e
”、“ $l
”、“ $l
”、“ ” ,$o
但我实际上希望它返回变量的h
内容e
、、、l
和。l
o
我怎么做?
您需要使用间接参数扩展:
for ((i=0; i<${#1}; i++)); do
t=${1:i:1}
echo "${!t}"
done
${!t}
取 的值$t
,并将其视为要扩展的参数的名称。
eval
用于安全地编写一系列echo
s 以输出bash
参数转换赋值语句的单行器, GNU grep
划分输入字符串:
h=foo o=bar
string() { eval $(printf 'echo ${%s@A};\n' $(grep -o . <<< "$@" )) ; }
string hello
输出,(空白线代表未设置的变量$e
和$l
):
h='foo'
o='bar'