执行以下代码时,输出符合我的预期:
$ foo=(a b "c d") && for p in "${foo[@]}"; do echo $p; done
a
b
c d
但是当初始化程序来自字符串时,例如:
$ foo=($(echo "a b \"c d\"")) && for p in "${foo[@]}"; do echo $p; done
a
b
"c
d"
所以输出是不同的,而我期望这两个命令做同样的事情。为什么两种方式不等同?如何获得初始化器来自字符串的变体与直接初始化相同的方式?
答案 0 :(得分:1)
这是一种方式:
str='a b "c d"'
eval "foo=($str)"
printf "%s\n" "${foo[@]}"
我现在需要洗澡。