创建数组:直接在源中的文本与字符串
Creating an array: text directly in source vs a string
当执行以下代码时,输出是我预期的:
$ 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"
所以输出不同,而我希望这两个命令执行相同的操作。为什么这两种方式不等价,我怎样才能得到初始化器来自字符串的变体,其工作方式与直接初始化相同?
方法如下:
str='a b "c d"'
eval "foo=($str)"
printf "%s\n" "${foo[@]}"
我要去洗澡了
当执行以下代码时,输出是我预期的:
$ 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"
所以输出不同,而我希望这两个命令执行相同的操作。为什么这两种方式不等价,我怎样才能得到初始化器来自字符串的变体,其工作方式与直接初始化相同?
方法如下:
str='a b "c d"'
eval "foo=($str)"
printf "%s\n" "${foo[@]}"
我要去洗澡了