1

I have just made the following mistake, where I am passing an argument to a function which is empty.

var1="ok"
var2=$notDefined

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

For each argument in the function I could do

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

But is there a more generic method to do this, so it is easy reusable, and would perhaps even tell the variable name that is empty?

4

4 回答 4

4

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

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

bash: x: unbound variable
于 2013-09-20T13:06:52.150 回答
2

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

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

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

于 2013-09-20T14:16:36.980 回答
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
于 2013-09-20T13:24:54.480 回答
0

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

于 2013-09-20T13:11:19.893 回答