繁体   English   中英

Bash:将 sed 结果存储到数组中?

[英]Bash: Store sed result into array?

如何修复以下代码,以便它可以存储sed的结果,这将替换_
-

我的代码:

names=()
for entry_ in $foo
do
  names+=($entry_ | sed -e "s/_/-/g")
done

echo names

这应该足以让你到达那里。

names=()

names+=$(echo "hello_world" | sed -e "s/_/-/g")

echo $names

请注意,在回显变量之前需要$

还。 考虑为您的代码编辑器安装shellcheck ,它会帮助您发现偷偷摸摸的错误并构建更好的 shell 编程实践。

您不需要sed为此,您可以使用 bash 的内置参数扩展 + 替换功能将所有_字符替换为-${var//_/-} 您甚至可以使用它在单个操作中对整个元素列表执行此操作,但您如何执行此操作取决于源变量foo实际上是什么。

如果foo是一个数组(更好的处理方式),您可以将[@] (“get me all elements of the array”)与替换组合:

names=( "${foo[@]//_/-}" )

如果foo是一个普通字符串,并且您需要使用分词将其分解为数组的元素,那么您可以在没有[@] (因为它不是数组)或双引号(它防止分词):

names=( ${foo//_/-} )

注意:我建议尽可能避免分词——它经常做一些接近你想要的事情,但几乎从不完全是你想要的。

Ps I 第三个是shellcheck的推荐。 除其他外,它会将涉及分词的任何内容标记为可能的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM