【发布时间】:2021-12-29 22:15:02
【问题描述】:
如何修复以下代码,以便它可以存储 sed 的结果,这将替换 _-?
我的代码:
names=()
for entry_ in $foo
do
names+=($entry_ | sed -e "s/_/-/g")
done
echo names
【问题讨论】:
-
请先尝试ShellCheck。
如何修复以下代码,以便它可以存储 sed 的结果,这将替换 _-?
我的代码:
names=()
for entry_ in $foo
do
names+=($entry_ | sed -e "s/_/-/g")
done
echo names
【问题讨论】:
您不需要sed,您可以使用bash 的内置parameter expansion + substitution 功能将所有_ 字符替换为-:${var//_/-}。您甚至可以使用它在单个操作中对整个元素列表执行此操作,但具体操作方式取决于源变量 foo 的实际含义。
如果foo 是一个数组(更好的处理方式),您可以将[@](“get me all elements of the array”)与替换组合起来:
names=( "${foo[@]//_/-}" )
如果foo 是一个纯字符串,并且您需要使用分词将其分解为数组的元素,那么您可以在没有[@](因为它不是数组)或双引号(防止分词):
names=( ${foo//_/-} )
注意:如果可能,我建议避免分词——它经常做一些接近你想要的事情,但几乎从不完全你想要的。
附:我第三次推荐shellcheck。除其他外,它会将涉及分词的任何内容标记为可能的错误。
【讨论】:
这应该足以让你到达那里。
names=()
names+=$(echo "hello_world" | sed -e "s/_/-/g")
echo $names
请注意,在回显变量之前,您需要 $。
还有。考虑为您的代码编辑器安装 shellcheck,它会帮助您发现偷偷摸摸的错误并构建更好的 shell 编程实践。
【讨论】: