"${param[0]}" 美元和 {1} 美元之间的区别



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

user_one:abcdef:secretfolder

函数的第一阶段看起来是这样的:

IFS=':' read -a param <<< $@
user="${param[0]}"
pass="${param[1]}"
user_folders="${param[2]}"

我以前从未见过这种作业,我想知道这是否只是一种替代的处理方式。上面的和这个一样吗?

IFS=':' read -a param <<< $@
user="${1}"
pass="${2}"
user_folders="${3}"

(由于${0}是文件本身的名称,因此值更改为1-3(。这个剧本已有5年历史;除非我错过了的东西,否则这种原始的任务似乎还有很长的路要走

我仍在学习shell脚本,但据我所知,设置IFS=':'将拆分:上的字段,而不是空白,因此在示例中,传递给函数的"${param[0]}"${1}的值将为user_one

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

命令:

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

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

param=(foo bar baz)

${1}${2}等语法始终引用脚本参数。

相关内容

  • 没有找到相关文章

最新更新