Bash echo $-1 打印 hb1。为什么?

Nei*_*eil 5 bash variable-substitution arguments

如果我要求 bash 回显第 -1 个参数,它会打印 hb1:

echo $-1
hb1
Run Code Online (Sandbox Code Playgroud)

为什么?它在访问什么?

jes*_*e_b 20

您不是要求它打印第一个参数,即:$1

您要求的是一个特殊参数

-

( $-, 连字符。) 扩展为调用时指定的当前选项标志,由 set 内置命令或由 shell 本身设置的那些标志(例如 -i 选项)。

所以你的选择是: hb

然后您会看到1您添加的内容随后被打印出来(因此hb1)。


如果您想获得最后一个参数(不确定这是否是您所说的 -1 参数),您可以使用以下形式的Shell Parameter Expansion

$ set -- one two three
$ echo "${@: -1}"
three
Run Code Online (Sandbox Code Playgroud)

  • `${!#}` 也是最后一个参数的值,使用间接扩展。 (8认同)
  • 嗯:`${@:~0}` 和 `eval echo \$$#` 也是最后一个参数。:-) (2认同)