Bash unix$#命令的作用是什么?

Bash unix$#命令的作用是什么?,bash,unix,Bash,Unix,我读了这一页,但还是不明白$的作用 我有一个讲座幻灯片中的例子: #!/bin/sh echo Total no. of inputs: $# echo first: $1 echo second: $2 我假设$#接受所有输入作为参数,我们应该期望两个输入。这就是它所做的吗?$#是一个特殊的内置变量,它保存传递给脚本的参数数量 使用建议的代码,例如: #!/bin/sh echo Total no. of *arguments*: $# echo first: $1 echo second:

我读了这一页,但还是不明白
$
的作用

我有一个讲座幻灯片中的例子:

#!/bin/sh
echo Total no. of inputs: $#
echo first: $1
echo second: $2
我假设$#接受所有输入作为参数,我们应该期望两个输入。这就是它所做的吗?

$#
是一个特殊的内置变量,它保存传递给脚本的参数数量

使用建议的代码,例如:

#!/bin/sh
echo Total no. of *arguments*: $#
echo first: $1
echo second: $2
如果将此脚本保存到文件(例如printArgCnt.sh)中,并且设置了printArgCnt.sh的可执行权限,则使用$#可以得到以下结果:

>。/printArgCnt.sh A B C
*参数总数*:3
第一:A
第二名:B
>>./printArgCnt.sh C B A

*参数总数*:3(如脚本所示:您传递给脚本的命令行参数总数

如果脚本名为:
kl.sh

执行为

/kl.sh hj jl lk
甚至
bash kl.sh hj jl lk

在脚本中,你正在做什么

echo$#

它将打印
3

在哪里

$1 is hj
$2 is jl
$3 is lk

可能不太清楚,但在链接中,它表示它对
计数,它只是通过命令行传递的参数数。它实际上什么都不做。它不是命令。它是一个特殊变量,包含传递到脚本的参数计数。该值由bash在脚本运行时设置它调用了.Edit:bash更新它的值,如果/当你做一个
shift
。x-ref问题中的最上面的答案是令人失望的随意性,并且在处理
$#
$@
$*
时非常不完整原因
$*
$@
相同,但
“$*”
“$@”
有很大的不同(一般而言),并且这两种形式都与不带引号的形式有很大的不同(同样,一般而言)。另一个答案稍微好一点,但仍然不完整。我相信我应该收回我的观点。我正确地回答了问题。“输入总数”是问题脚本中的术语。最好将“输入”更改为“args”或“arguments”。输入倾向于引用文件,其中一些文件可能由参数指定,but“标准输入”也是一种输入,环境也可以提供输入(秘密地;使用环境变量并不总是一个好主意)。好的,足够公平。按请求编辑。
$1 is hj
$2 is jl
$3 is lk