${!#} 在 Shell 脚本中意味着什么?

${!#} 在 Shell 脚本中意味着什么?

在一个混淆的恶意 shell 脚本中发现了这一点,开头为:

${!#}${*^} <<<...

找不到任何对 的引用${!#},但当echo'd 时,它输出-bash.这是对正在运行的 shell 的秘密引用吗?那为什么还要多一个破折号呢?

谢谢!

答案1

这个答案是bash特定的,因为您尝试了echoin bash。并非所有 shell 的行为都相同。

bash,如果$var1foo,则${!var1}与 相同$foo。这!间接扩张:它导致bash从给定变量 a 中检索变量名foo) 代替价值

现在替换var1#$#是参数的数量。如果 $#是 0,${!#}则 是$0。如果 $#是 4,${!#}则 是$4。换句话说,${!#}是最后一个位置参数,无论有多少个位置参数。

如果没有位置参数$#is 0,则结果为$0,这是 shell 或脚本的名称 (参考)。就你而言,那就是bash(加上领导-这意味着它是一个登录 shell)。

快速测试:

$ echo ${!#}
-bash

$ set the quick brown fox

$ echo ${!#}
fox

相关内容