$ {_ [0]}在bash中是什么意思?

斯威

当我在bash命令行中键入此命令时

$ x=hi; printf '%s ' "$x" "${x[0]}"; echo "${_[0]}"

我有这个输出:

hi hi hi
  • 为什么"${_[0]}"原来"hi"在输出中?
  • "x[0]"既然"x"只是astring而不是a 为什么还要使用语法array呢?
埃利亚·卡根(Eliah Kagan)

_参数根据上下文具有多种含义,但它绝不是数组。同样,在您的示例中,x不是数组。之所以能够将其视为数组,是因为Bash允许将非数组变量视为一元数组Bash同样允许将数组变量视为非数组,从而赋予第一个元素。

如上man bash所说:

引用不带下标的数组变量等效于引用带下标0的数组。使用有效下标对变量的任何引用都是合法的,并且bash会在必要时创建一个数组。

因此,"${_[0]}"其行为与"${_}"相同"$_",因为_它不是数组。同样,由于不是数组"${x[0]}"其行为与"${x}"相同"$x"x


至于为什么_保留该值hi:在您显示的用法中,对特殊参数执行参数扩展_生成最新(同步执行)命令的最后一个参数。

man bash所述_

在shell启动时,设置为用于调用环境或参数列表中传递的正在执行的shell或shell脚本的绝对路径名。随后,在扩展后,扩展到在前台执行的上一个简单命令的最后一个参数。还设置为用于调用每个执行的命令的完整路径名,并将其放置在导出到该命令的环境中。检查邮件时,此参数保存当前正在检查的邮件文件的名称。

(强调我的)

在这种情况下,最近执行的命令是:

printf '%s ' "$x" "${x[0]}"

传递给的参数printf为:

  • %s ,仅对其执行了引号删除。
  • hi,对其执行参数扩展,然后删除引号。
  • hi,然后执行更复杂形式的参数扩展以产生相同的结果,然后删除引号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章