关于bash:如何检查是否存在第二个参数

How to check for the existence of a second argument

本问题已经有最佳答案,请猛点这里访问。

我需要更新我在处理Git时使用的bash函数:

1
2
3
4
5
6
7
8
push() {
  a=$1
  if [ $# -eq 0 ]
    then
      a=$(timestamp)
  fi
  # ... do stuff
}

但我不知道这条线是怎么工作的

1
 if [ $# -eq 0 ]

我需要检查第一个参数,然后检查第二个参数。

所以有2个if语句。

我怎么更新这个?这条线路怎么用?

1
 if [ $# -eq 0 ]


$#部分是一个变量,包含传递给脚本的参数数量。

这里的条件语句使用-eq检查该变量的值,并检查该值是否为零(就像没有传递参数一样)。

为了检查两个参数,可以将该行更改(或添加)如下:

1
 if [ $# -eq 2 ]

您可以创建一个小脚本来研究当您使用不同数量的参数调用函数时,$#是如何变化的。例如:

[push.sh":"的内容]

1
2
3
4
5
6
7
8
9
10
push() {
    echo $#
}

echo"First call, no arguments:"
push
echo"Second call, one argument:"
push"First argument"
echo"Third call, two arguments:"
push"First argument""And another one"

如果将其放入脚本并运行,您将看到如下内容:

1
2
3
4
5
6
7
-> % ./push.sh
First call, no arguments:
0
Second call, one argument:
1
Third call, two arguments:
2

这说明EDOCX1的值(0)包含为函数提供的参数数量。

可以添加到脚本中的if [ $# -eq 0 ]部分,并将0更改为其他一些数字,以查看会发生什么。此外,在互联网上搜索"bash if"可以揭示-eq部分的含义,并显示您也可以使用-lt-gt,例如,测试一个数字是否小于或大于另一个数字。

最后,您可能希望使用以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
a=$1
b=$2

if [ $# -lt 1 ]
then
   a=$(timestamp)
fi

if [ $# -lt 2 ]
then
    b=$(second thing)
fi