![](/img/trans.png)
[英]Execute bash command stored in associative array over SSH, store result
[英]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.