为什么我们不能使用${$#}来获取传递给shell 脚本的最后一个参数?
我们不能使用${$#}
来获取最后一个参数,因为变量展开不是递归的,{
}
的内容只被shell 解析一次.我们不能使用它,因为它从未实施过.我认为这里真的没有太多解释,只是说是这样的.
没有太多的解释是为什么会这样,只是它是如此.
虽然我们不能在物理学中解释为什么,但你可以认为我们可以在编程中解释为什么.对于"为什么",唯一的答案是"因为它是以这种方式被创造出来的".写(第一个)shell的人是这样写的,它得到standardized ,现在所有的标准shell 都是这样工作的.
很可能是这样写的,因为它很容易做到.我想这是我们能得到的最好的解释了.
如果我确实 echo 了${$#},我会得到一个随机数字(当我try 它时,我得到了5138).这个数字有任何意义吗?
echo $$
表示当前shell 进程的PID.
echo ${$}
还给出了当前shell 进程的PID.
- 如果为
${var#string}
,则从展开var
的开始中删除string
- 例如,
a=1234; echo ${a#12}
从1234
的开头删除12
,得到34
.
${$#}
扩展到当前的pid,如$$
,然后#
删除."nothing"从变量的开始,所以它是相同的$$
.
第https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html章第${parameter#word}
章
记住使用shellcheck https://www.shellcheck.net/判断您的脚本.也要判断https://mywiki.wooledge.org/BashFAQ.