关于这个问题(将行分隔的grep结果放入array),当我使用
echo v1.33.4 | arr=($(egrep -o '[0-9]{1,3}'))
与GNU bash, version 5.0.2(1)-release (x86_64-apple-darwin18.2.0)
上macOS
我得到一个空数组arr
作为回报
echo "($arr)"
()
然后是预期的输出
1
33
4
我在这里做什么错?
它不能与您使用的语法一起使用。您不会使用的结果填充数组grep
。您不处理传递到管道上的字符串,也不在管道的接收端填充空数组。
也许你打算做
array=($(echo v1.33.4 | egrep -o '[0-9]{1,3}'))
请注意,如何将echo
字符串的传递到egrep
您尝试中缺少的标准输入。
但是,就像在链接的答案中一样,使用mapfile
将是此处的最佳选择,因为通过上述方法,如果搜索结果包含包含空格的单词,则它们将存储在数组中单独的索引中,而不是单个索引中。
mapfile -t array < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')
printf '%s\n' "${array[@]}"
请注意,数组中的扩展bash
采用的语法"${array[@]}"
不仅是简单的"${array}"
扩展。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句