我发现以下示例来自这里。但我无法理解数组arr
是如何定义的。
a='domain.de;de;https'
$ arr=(${a//;/ })
这样定义有什么好处呢?
实际上,我想将一个数组存储在不同大小的数组中,如下所示:
declare -a Workspace=(
"${Folder[0]}" "CFD" "General,Markdown"
"${Folder[4]}" "GPU" "General,Markdown,Python,C,Java"
)
例如,在上面,我想访问术语General
和Markdown
for CFD
。
答案1
在 shell(任何 shell)中,数组的数组是一个坏主意。你需要一些其他语言。
数组是如何
arr
定义的?a='domain.de;de;https' arr=(${a//;/ })
它的工作原理是:
- 将每个替换
;
为space
- 假设 IFS 是空格、制表符、换行符(默认)
- 空间分裂(包含在 IFS 中)未引用的的扩展
${...}
- 将其分配给数组
(...)
- 并命名该数组
arr=
。
这样定义有什么好处呢?
没有,只有问题:
- 如果任何元素包含空格、制表符或换行符,它将被拆分。
- 由于通配符未关闭,任何
*
,?
或[ ]
都将扩展到匹配文件。 - 如果 nullglob 处于活动状态,则任何包含
*
,?
或 的字符串[ ]
都将被删除。 - 如果failglob处于活动状态,前面的任何字符都会生成错误。
简而言之,在 shell 上进行分割充满了陷阱。