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
数组恰好包含参数。它可以很容易地包含 foo
、bar
和 baz
,如果它是这样创建的:
param=(foo bar baz)
</code>、<code>
等语法总是 引用脚本参数。
我正在查看一些旧脚本,我发现了一些我以前从未见过的参数分配。 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
数组恰好包含参数。它可以很容易地包含 foo
、bar
和 baz
,如果它是这样创建的:
param=(foo bar baz)
</code>、<code>
等语法总是 引用脚本参数。