如何检查是否存在第二个参数

时间:2015-12-06 13:17:35

标签: bash

我需要更新这个用于使用git做事的bash函数:

push() {
  a=$1
  if [ $# -eq 0 ]
    then
      a=$(timestamp)
  fi
  # ... do stuff
}

但我不知道这条线如何运作

 if [ $# -eq 0 ]

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

因此会有2个if语句。

如何更新此行以及此行如何工作

 if [ $# -eq 0 ]

2 个答案:

答案 0 :(得分:5)

当您使用不同数量的参数调用函数时,您可以创建一个小脚本来查看$#如何更改。例如:

[push.sh“的内容:]

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"

如果你把它放在脚本中运行它,你会看到类似的东西:

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

这告诉您$#的值包含赋予函数的参数数量。

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

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

a=$1
b=$2

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

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

答案 1 :(得分:5)

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

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

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

 if [ $# -eq 2 ]