在Ubuntu 20.04中,你可以在执行Bash脚本时为其提供任意数量的命令行参数。然而,有时脚本是以动态方式编写的,甚至程序员也不知道用户在运行时将提供多少个参数,但他可能想在该脚本的某个地方使用这个总数。
在这种情况下, 必须有一种方法可以检查传递给任何特定Bash脚本的参数总数.为此, Bash有一个特殊的变量, 即$#.为了弄清楚这个特殊变量是如何工作的,你将不得不通过本文中分享的所有例子。
在Ubuntu 20.04中检查Bash的参数数的方法。
为了向你解释在Ubuntu 20.04中检查提供给Bash脚本的参数数的方法,我们设计了几个例子,在下面讨论。
例子# 1: 打印Bash中的参数总数:
要想简单地打印Ubuntu 20.04中传递给Bash脚本的参数总数,你可以写一个如下图所示的Bash脚本。

$#这个特殊变量总是保存着传递给任何特定Bash脚本的参数总数。
为了测试这个脚本,我们用三个参数执行了它,如下所示。
$ bash Arguments.sh 1 2 3
这里,Arguments.sh是我们的Bash脚本文件的名字,而1、2和3是我们传递给这个Bash脚本的参数。这意味着这个测试案例中的参数总数是 "3"。让我们试试这个Bash脚本是否正确显示了参数总数.

当我们执行这个Bash脚本的时候, 它将显示传递给它的参数总数, 这可以从下面的图片中看出:

例子2: 在Bash中打印参数总数和带位置参数的参数值:
现在, 我们将编写一个Bash脚本, 来打印传递给Bash脚本的参数值和它们的总数.为了做到这一点,Bash脚本的内容如下。

在这个Bash脚本中,我们首先打印了三个位置参数的值。这意味着从终端传递给这个Bash脚本的任何参数都将被保存在这三个位置参数中。之后,我们简单地打印了$#这个特殊变量的值。
在我们的第一个例子中, 我们将用我们传递给Bash脚本的相同参数来执行这个脚本.这一次当我们执行Bash脚本的时候, 三个传入的参数的值也会在终端上显示出来,同时也会显示它们的总数,正如你在下面的图片中看到的那样。

例子3: 用Bash中的$@特殊变量打印参数总数和参数值:
这个例子的目标与第二个例子相同; 但是, 在这个例子中, 我们将使用另一个特殊变量, 即@这个特殊变量可以容纳所有传递给Bash脚本的参数.为了理解这一点, 你可以看一下我们为你设计的下面这个Bash脚本:

在这个Bash脚本中, 我们简单地打印了#特殊变量的值, 即终端上传递的参数的总数.
为了看看这个经过修改的Bash脚本是如何工作的,我们再次用与上面两个例子中相同的参数来执行它。当这个脚本被执行时,输出结果与我们在第二个例子中的结果完全一样。

例子4:用Bash中的$*特殊变量打印参数总数和参数值。
这是第二个例子的另一个修改版本, 因为在这个例子中, 我们将使用@特殊变量一样, $*特殊变量也可以保存所有传递给任何特定Bash脚本的参数值.修改后的Bash脚本显示在下面的图片中。
在这个Bash脚本中, 我们简单地打印了#特殊变量的值, 即终端上通过的参数的总数.

为了测试这个Bash脚本并直观地看到它的输出,我们用与前三个例子中相同的参数来执行它。这一次,当我们的Bash脚本被执行时,它的输出与第二和第三个例子的输出相同,你可以从下面的图片看到。

例子5: 在Bash中对参数总数进行限制:
最后,在Ubuntu 20.04中,$#这个特殊变量也可以用来限制传递给Bash脚本的参数总数。为了理解这一现象,你必须通过下面图片中的Bash脚本。

在这个Bash脚本中,我们有一个 "if "语句,它被应用于$#这个特殊变量。我们想把参数的数量限制在 "3"。如果参数少于 "3",就会在终端打印出错误信息。同样,如果参数大于 "3",同样会有一条错误信息打印在终端上。然而,如果提供的参数只等于 "3",那么这些参数的值将被打印在终端上。
我们想测试一下这个Bash脚本的所有三个条件。为此,我们首先执行了这个带有三个参数的脚本,相应的输出显示在下面的图片中。

之后,我们用四个参数执行了这个Bash脚本,由于这个原因,在终端上打印了一个错误信息,如下图所示。

最后,我们执行了这个带有两个参数的Bash脚本,由于这个原因,终端上又打印出了一个错误信息,如下图所示。

总结
$#这个特殊的变量可以让你非常容易地找出传递给任何Bash脚本的参数总数。通过查看本文中分享的例子,你会对这个特殊变量的工作有一个清晰的认识。因此,你现在可以毫无顾虑地编写这样的Bash脚本,在Ubuntu 20.04上运行时,会以某种方式使用提供给这些Bash脚本的参数总数。