我正在为我写一个复杂的脚本,我的目标是做以下事情。我有一个字符串进来,看起来像这样:
2012 2013 "multiple words"
我的目标是将这些每一个都放在一个由空格分割的数组中,但只能用于单个字匹配,而不是双引号。应该考虑一个字。所以我的想法是这样做两步。首先匹配那些倍数的单词,从字符串中删除那些,然后在另一个由空格分割的迭代中。
不幸的是,我找不到如何回应比赛的帮助。到目前为止我有这个:
array=$(echo $tags | sed -nE 's/"(.+)"/\1/p')
但这将导致(在OS X上):
2012 2013 multiple words
预期结果:
array[1]="2012" array[2]="2013" array[3]="multiple words"
我将如何解决这类问题?
谢谢。
eval是邪恶的,但这可能是其中很方便的情况之一
原文链接:https://www.f2er.com/bash/387427.htmlstr='2012 2013 "multiple words"' eval x=($str) echo ${x[2]} multiple words
或者更新版本的bash(在4.3上测试)
s='2012 2013 "multiple words"' declare -a 'a=('"$s"')' printf "%s\n" "${a[@]}" 2012 2013 multiple words