为什么shell脚本不接受第一个参数

use*_*411 0 bash shell bash-function

我是unix shell脚本的新手.我试图用参数执行示例函数,但shell不会将第一个参数识别为第一个参数而是识别为第二个参数.

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

没有收到输出功能

应该给予的地方

func
hello received
Run Code Online (Sandbox Code Playgroud)

Chr*_*aes 6

你的测试应该是:

if [ -n "$1" ]
Run Code Online (Sandbox Code Playgroud)

代替 if [ -z $1 ]

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

请注意,您最好在$ 1附近添加报价; 否则,当你不传递任何参数时,它将无法工作.

  • 具体来说,当没有传递参数时,`[ - z $ 1]`变为`[ - z]`,它被```````解释为`[-n -z]`,它总是为真. (2认同)