arrays - 替换 bash 数组中的空元素

标签 arrays bash shell

假设我创建了一个这样的数组:

IFS="|" read -ra ARR <<< "zero|one|||four"

现在

echo ${#ARR[@]}
> 5
echo "${ARR[@]}"
> zero one   four
echo "${ARR[0]}"
> zero
echo "${ARR[2]}"
> # Nothing, because it is empty

问题是如何用另一个字符串替换空元素?

我试过了

${ARR[@]///other}
${ARR[@]//""/other}

它们都不起作用。

我想要这个作为输出:

zero one other other four

最佳答案

要让 shell 扩展正常运行,您需要遍历其元素并对每个元素执行替换:

$ IFS="|" read -ra ARR <<< "zero|one|||four"
$ for i in "${ARR[@]}"; do echo "${i:-other}"; done
zero
one
other
other
four

地点:

${parameter:-word}

If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

要将它们存储在一个新数组中,只需附加 +=( element ) 即可:

$ new=()
$ for i in "${ARR[@]}"; do new+=("${i:-other}"); done
$ printf "%s\n" "${new[@]}"
zero
one
other
other
four

关于arrays - 替换 bash 数组中的空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893336/

相关文章:

javascript - 尝试为我的 Electron 应用程序创建安装程序时生成未找到错误

shell - 如何在 Haskell 中执行一系列 shell 命令并在出现错误时中断?

javascript - 比较独立于顺序的对象数组

c# - 如何从抽象类创建对象?

bash - 如何将嵌套命令传递给Docker运行?

linux - crontab 无法删除文件夹

c - 无法对 C 程序使用 readlink for/proc/self/exe

java - 添加整数数组作为类的变量

代码: unknown type name string的编译

linux - 如何在shell脚本中修改文件名?