0

我是 unix shell 脚本的新手。我正在尝试使用参数执行示例函数,但 shell 不将第一个参数识别为第一个参数,而是将其识别为第二个。

#!/bin/bash
func(){
    echo "func"
    if [ -z $1 ]
    then echo "$1 received"
    else echo "not received"
    fi
    }
func "hello"

给出未收到的输出函数

它应该给的地方

func
hello received
4

2 回答 2

6

你的测试应该是:

if [ -n "$1" ]

代替if [ -z $1 ]

  • -n:变量不为空
  • -z:变量为空

注意你最好在 $1 左右加上引号;否则,当您不传递任何参数时,它将不起作用。

于 2015-01-06T13:16:37.673 回答
3

有几种方法可以做到这一点。我的偏好是:

#!/bin/bash
func(){ echo ${1:-no argument} passed; }
func "hello"
func ""
func

在此示例中,第二次调用将写入“未传递参数”。如果要更改行为,请删除1函数定义中的冒号。您当然可以使用test -n "$1"(test与 相同[,只是您不需要终止]参数),但检查 的值会更合适$#,它会计算传递给函数的参数数量。

func() { 
    if test $# -lt 1; then
        echo no argument passed
    else
        echo at least one argument passed
    fi
}
于 2015-01-06T13:45:22.633 回答