Bash 在已执行脚本的内部执行awk输出

Bash 在已执行脚本的内部执行awk输出,bash,awk,associative-array,Bash,Awk,Associative Array,有一些类似的主题,但这略有不同 我的数据库中有脚本和参数的名称a。当我执行: sqlite3 log/log.db "select name, a from result" | awk -F '|' '{printf("a[%s]=%s;\n",$1,$2);}' 我明白了: a[inc.bash]=4.23198234894777e-06; a[inc.c]=3.53343440279423e-10; 在我的bash脚本中,我希望使用关联数组 当我执行此代码时(手动编码a[inc.

有一些类似的主题,但这略有不同


我的数据库中有脚本和参数的名称
a
。当我执行:

sqlite3 log/log.db "select name, a from result" | awk -F '|' '{printf("a[%s]=%s;\n",$1,$2);}' 
我明白了:

a[inc.bash]=4.23198234894777e-06;
a[inc.c]=3.53343440279423e-10;

在我的bash脚本中,我希望使用关联数组


当我执行此代码时(手动编码
a[inc.bash]
):

它工作正常,可以打印

4.23198234894777e-06

但我不知道如何使用awk的第一个显示命令的输出来分配脚本中声明的关联数组
a
的键的值

我想在脚本中执行awk打印的代码,但当我使用类似于
$()
`
的东西时,它会打印如下错误:

代码:

输出:

a[inc.bash]=4.23198234894777e-06; not found command

要让Bash将输出解释为命令,可以使用进程替换和
source
命令:

declare -A a
source <(sqlite3 log/log.db "select name, a from result" |
         awk -F '|' '{printf("a[%s]=%s;\n",$1,$2);}')
echo ${a[inc.bash]}

总而言之,这和使用
eval
一样危险:不管sqlite/awk脚本的输出是什么,它都会被执行

哇,太棒了。谢谢,一切正常。我会在我的博客上提到你。再次感谢你!
a[inc.bash]=4.23198234894777e-06; not found command
declare -A a
source <(sqlite3 log/log.db "select name, a from result" |
         awk -F '|' '{printf("a[%s]=%s;\n",$1,$2);}')
echo ${a[inc.bash]}
$ declare -A a
$ source <(echo 'a[inc.bash]=value')
$ echo "${a[inc.bash]}"
value