我是unix shell脚本的新手。我试图用参数执行样本函数,但是shell不会将第一个参数识别为第一个参数而是识别为第二个参数。
#!/bin/bash
func(){
echo "func"
if [ -z $1 ]
then echo "$1 received"
else echo "not received"
fi
}
func "hello"
给出输出 FUNC 没收到
应该在哪里给出
func
hello received
答案 0 :(得分:6)
您的测试应该是:
if [ -n "$1" ]
而不是if [ -z $1 ]
注意您最好在$ 1附近添加报价;否则,当你不传递任何参数时它将无法工作。
答案 1 :(得分:3)
有几种方法可以做到这一点。我的偏好是:
#!/bin/bash
func(){ echo ${1:-no argument} passed; }
func "hello"
func ""
func
在此示例中,第二个调用将写入“no argument passed”。如果要更改行为,请在函数定义中的1
后删除冒号。您当然可以使用test -n "$1"
(test
与[
相同,但您不需要终止]
参数)但检查值更合适$#
,它给出了传递给函数的参数数量的计数。
func() {
if test $# -lt 1; then
echo no argument passed
else
echo at least one argument passed
fi
}