我有一个脚本 test.sh 如下
#!/bin/bash
echo "$1"
我从另一个脚本调用该脚本,如下所示
#!/bin/bash
declare -A val
val[first]="./test.sh ${value} | grep testing "
for KEY in "${!val[@]}"; do
value="testing"
echo "${val[$KEY]}"
done
echo "${val[$KEY]}"
回报./test.sh | grep testing
它不是打印值变量的值。为什么?
答案1
到目前为止,您的脚本定义了该变量但未对其求值:
您分配"./test.sh ${value} | grep testing "
,但${value}
将在以下时间扩展这任务。但是,此时您value
还没有定义,因此它是空的,并且字符串变为"./test.sh | grep testing"
。使用单引号 ( '
) 而不是双引号 ( "
) 以防止 shell 扩展变量:
'./test.sh ${value} | grep testing '
稍后你会echo
得到变量的值。如果你想执行./test.sh ...
您存储在变量中的命令,您需要对其进行评估,例如
eval "${val[$KEY]}"