数组中的数组:bash 中数组的不同语法

数组中的数组:bash 中数组的不同语法

我发现以下示例来自这里。但我无法理解数组arr是如何定义的。

a='domain.de;de;https'
$ arr=(${a//;/ })

这样定义有什么好处呢?

实际上,我想将一个数组存储在不同大小的数组中,如下所示:

declare -a Workspace=(
    "${Folder[0]}"  "CFD"   "General,Markdown"
    "${Folder[4]}"  "GPU"   "General,Markdown,Python,C,Java"
)

例如,在上面,我想访问术语GeneralMarkdownfor CFD

答案1

在 shell(任何 shell)中,数组的数组是一个坏主意。你需要一些其他语言。

数组是如何arr定义的?

a='domain.de;de;https'
arr=(${a//;/ })

它的工作原理是:

  • 将每个替换;space
  • 假设 IFS 是空格、制表符、换行符(默认)
  • 空间分裂(包含在 IFS 中)未引用的的扩展${...}
  • 将其分配给数组(...)
  • 并命名该数组arr=

这样定义有什么好处呢?

没有,只有问题:

  • 如果任何元素包含空格、制表符或换行符,它将被拆分。
  • 由于通配符未关闭,任何*,?[ ]都将扩展到匹配文件。
  • 如果 nullglob 处于活动状态,则任何包含*,?或 的字符串[ ]都将被删除。
  • 如果failglob处于活动状态,前面的任何字符都会生成错误。

简而言之,在 shell 上进行分割充满了陷阱。

相关内容