Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何检查是否存在第二个参数_Bash - Fatal编程技术网

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

Bash 如何检查是否存在第二个参数,bash,Bash,我需要更新我用来处理git的bash函数: push() { a=$1 if [ $# -eq 0 ] then a=$(timestamp) fi # ... do stuff } 但我不知道这条线是怎么运作的 if [ $# -eq 0 ] 我需要检查第一个参数,然后我需要检查第二个参数 因此将有两个if语句 我怎样才能更新它,这条线是如何工作的 if [ $# -eq 0 ] 您可以创建一个小脚本来研究当您使用不同数量的参数调用函数时,$#是如

我需要更新我用来处理git的bash函数:

push() {
  a=$1
  if [ $# -eq 0 ]
    then
      a=$(timestamp)
  fi
  # ... do stuff
}
但我不知道这条线是怎么运作的

 if [ $# -eq 0 ]
我需要检查第一个参数,然后我需要检查第二个参数

因此将有两个if语句

我怎样才能更新它,这条线是如何工作的

 if [ $# -eq 0 ]

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

[push.sh的内容:

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

-> % ./push.sh
First call, no arguments:
0
Second call, one argument:
1
Third call, two arguments:
2
这告诉您,
$#
的值包含给定给函数的参数数

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

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

a=$1
b=$2

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

if [ $# -lt 2 ]
then
    b=$(second thing)
fi
$#
部分是一个变量,包含传递给脚本的参数数量

那里的条件语句使用
-eq
检查该变量的值,并检查该值是否为零(如未传递任何参数)

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

 if [ $# -eq 2 ]

在这篇文章之前,我没有意识到
$#
是一个变量。为什么不像我见过的其他语言一样使用
。为什么这种语言如此神秘?
确实存在,但它们用于字符串比较(字典顺序)。我认为它们是不同的,因为字符串和数字在bash中不是“类型安全的”,所以[[10<2]]是正确的(在字符串排序中),但是[[10-lt 2]]显然是错误的(这是您所期望的)。例如,在JS中,您可以执行
10<2
“10”<“2”
。如果你有一个数字或字符串,你必须有办法告诉解释器。因此引语说嘿。。。这是一个字符串。让运算符确定操作数是什么。。。。至少可以说是荒谬的疯狂。这是一种看待它的方式。另一方面,必须在所有字符串参数(如文件名或命令行选项)周围加引号,这将非常繁琐。但我同意,这可能令人困惑。
 if [ $# -eq 2 ]