【问题标题】:Bash: Store sed result into array?Bash:将 sed 结果存储到数组中?
【发布时间】:2021-12-29 22:15:02
【问题描述】:

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

我的代码:

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

echo names

【问题讨论】:

标签: arrays bash loops


【解决方案1】:

您不需要sed,您可以使用bash 的内置parameter expansion + substitution 功能将所有_ 字符替换为-${var//_/-}。您甚至可以使用它在单个操作中对整个元素列表执行此操作,但具体操作方式取决于源变量 foo 的实际含义。

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

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

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

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

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

附:我第三次推荐shellcheck。除其他外,它会将涉及分词的任何内容标记为可能的错误。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 在看到你的答案之前我做了````。好的,我将尝试 shellcheck。让我看看它是否有neovim插件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2012-11-05
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多