【发布时间】:2021-08-15 18:18:23
【问题描述】:
我想动态声明和取消设置关联数组,但数组让我发疯,而且它们确实拥有最好的驾驶执照。 :-(
names=( Charlie Snoopy Linux Marcia )
intestines=$(printf "%s\n" ${names[@]} | awk '{ print "["$1"]="FNR }' | tr "\n" " ")
echo $intestines # ok: [Charlie]=1 [Snoopy]=2 [Linux]=3 [Marcia]=4
unset namesAssociative
declare -A namesAssociative=( [Charlie]=1 [Snoopy]=2 [Linux]=3 [Marcia]=4 ) # works ok
echo ${namesAssociative[Linux]} # OK: 3
但是:
unset namesAssociative
declare -A namesAssociative=( $intestines ) # error
exec "declare -A namesAssociative=( $intestines )" # error
declare -A namesAssociative=( $(printf "%s\n" ${names[@]} | awk '{ print "["$1"]="FNR }' | tr "\n" " ") ) # error
etc...
我猜是上帝惩罚了我,因为我从一开始就没有用 Python 写这个...... :-)
【问题讨论】:
-
declare -A "namesAssociative=( $intestines )"在这种特殊情况下应该可以正常工作。一般来说,这是一种黑客行为,根本不可靠。 -
当我重现您的案例时,
namesAssociative的声明会产生错误 bash: namesAssociative: $intestines: must use subscript when assignment associative array,我由此得出结论在这种情况下,参数扩展后不进行分词。我不知道为什么会这样,但我认为这是一个有效的问题。只是提到你得到“错误”,而不说是什么错误,并没有真正的帮助。顺便说一句,您的exec命令没有意义;您需要一个可执行文件作为参数。你的意思是eval吗? -
是的,是的,是的。 eval 不执行... :-) 谢谢!
标签: bash associative-array substitution