如何在函数错误中捕获缺失的参数?

时间:2013-09-20 13:02:39

标签: linux bash

我刚刚犯了以下错误,我将一个参数传递给一个空的函数。

var1="ok"
var2=$notDefined

func $var1 $var2
func() {
  var1=$1
  var2=$2
  echo $var1
  echo $var2
}

对于我可以做的函数中的每个参数

if [ -z $1 ]; then echo "Empty argument"; fi

但是有没有更通用的方法来做到这一点,所以它很容易重用,甚至可能告诉变量名是空的?

4 个答案:

答案 0 :(得分:4)

您可以按set -u停止整个脚本。如果您尝试使用未设置的变量,它将失败。这是非常通用的方法。

Bash会将以下本地化消息输出到标准错误:

bash: x: unbound variable

答案 1 :(得分:2)

您想使用? bash变量替换运算符:

var1=${1:?"undefined!"}

如果$1存在并且不为null,则将var1设置为其值,否则bash打印1后跟"undefined!"并中止当前命令或脚本。此语法可用于任何bash变量。

答案 2 :(得分:0)

在您的情况下,会创建空变量,因为函数的参数太少。 您可以通过$#获取传递的参数数量。所有使用$n且数字n更高的变量必须为空。您可以在函数开头检查足够多的参数。

答案 3 :(得分:0)

#!/bin/bash

var1="ok"
var2=$notDefined

func() {
        if [[ $# -ge 2 ]];  then
                var1=$1
                var2=$2
                echo $var1
                echo $var2
        else
                echo "Missing values"
        fi
}
func $var1 $var2

这里正在运行

./test.sh 
Missing values

这里有两个值:

#!/bin/bash

var1="ok"
var2="dokie"

func() {
    if [[ $# -ge 2 ]];  then
        var1=$1
        var2=$2
        echo $var1
        echo $var2
    else
        echo "Missing values"
    fi
}
func $var1 $var2

结果:

 ./test.sh 
ok
dokie