创建数组:直接在源文本和字符串中创建文本

时间:2015-01-09 21:09:54

标签: bash

执行以下代码时,输​​出符合我的预期:

$ 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"

所以输出是不同的,而我期望这两个命令做同样的事情。为什么两种方式不等同?如何获得初始化器来自字符串的变体与直接初始化相同的方式?

1 个答案:

答案 0 :(得分:1)

这是一种方式:

str='a b "c d"'
eval "foo=($str)"
printf "%s\n" "${foo[@]}"

我现在需要洗澡。