我刚刚犯了以下错误,我将一个参数传递给一个空的函数。
var1="ok"
var2=$notDefined
func $var1 $var2
func() {
var1=$1
var2=$2
echo $var1
echo $var2
}
对于我可以做的函数中的每个参数
if [ -z $1 ]; then echo "Empty argument"; fi
但是有没有更通用的方法来做到这一点,所以它很容易重用,甚至可能告诉变量名是空的?
答案 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