使用空格将字符串(存储在变量中)拆分为多个单词,而不是双引号内的空格

Zet*_*ttt 19 bash awk sed

我正在尝试为我编写一个复杂的脚本,我的目标是执行以下操作.我有一个字符串进来,看起来像这样:

2012 2013 "multiple words"
Run Code Online (Sandbox Code Playgroud)

我的目标是将每个这些放入由空格分割的数组中,但仅用于单个字匹配,而不是用双引号括起来的那些.那些应该被认为是一个词.所以我的想法是分两步完成.首先匹配那些是倍数的单词,从字符串中删除那些,然后在由空格分割的另一个迭代中.
很遗憾,我无法找到有关如何进行echo比赛的帮助.到目前为止我有这个:

array=$(echo $tags | sed -nE 's/"(.+)"/\1/p')
Run Code Online (Sandbox Code Playgroud)

但这会导致(在OS X上):

2012 2013 multiple words
Run Code Online (Sandbox Code Playgroud)

预期结果:

array[1]="2012"
array[2]="2013"
array[3]="multiple words"
Run Code Online (Sandbox Code Playgroud)

我该如何处理这类问题?

谢谢.

iru*_*var 20

eval 是邪恶的,但这可能是它派上用场的案例之一

str='2012 2013 "multiple words"'
eval x=($str)
echo ${x[2]}
multiple words
Run Code Online (Sandbox Code Playgroud)

或者使用更新的版本bash(在4.3上测试)

s='2012 2013 "multiple words"'
declare -a 'a=('"$s"')'
printf "%s\n" "${a[@]}"
2012
2013
multiple words
Run Code Online (Sandbox Code Playgroud)