bash 中“${param[0]}”和 ${1} 的区别

Difference between "${param[0]}" and ${1} in bash

我正在查看一些旧脚本,我发现了一些我以前从未见过的参数分配。 while 循环从文本文件中读取并将值传递给函数。文本文件中的项目如下所示:

user_one:abcdef:secretfolder

函数的第一阶段如下所示:

 IFS=':' read -a param <<< $@

 user="${param[0]}"
 pass="${param[1]}"
 user_folders="${param[2]}"

我以前从未见过这种赋值,想知道这是否只是处理它的另一种方法。上面和这个一样吗?

IFS=':' read -a param <<< $@

user=""
pass=""
user_folders=""

(由于 [=14=] 是文件本身的名称,值更改为 1-3)。这个脚本已有 5 年历史;除非我遗漏了什么,否则这种原始类型的作业似乎需要更长的时间才能完成

我仍在学习 shell 脚本,但据我了解,设置 IFS=':' 将在 : 上拆分字段而不是空格,因此在示例中, "${param[0]}"</code> 传递给函数将是 <code>user_one

有人可以解释一下为什么应该使用 "${param[0]}" 而不是 吗?

命令:

IFS=':' read -a param <<< $@

将命令参数 ($@) 中 : 分隔的字段读取到名为 param 的数组变量中。 Bash 数组就像其他语言中的列表一样工作,您可以用方括号对它们进行索引。 ${param[0]} 是第一个字段,${param[1]} 然后是下一个,依此类推。像这样的数组可以包含任何东西,只是因为read命令中的$@,这个param数组恰好包含参数。它可以很容易地包含 foobarbaz,如果它是这样创建的:

param=(foo bar baz)

</code>、<code> 等语法总是 引用脚本参数。