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