我写了一个小函数,如果函数参数的值为空,它会退出,如果可能的话,我希望也能够打印参数的名称(不是值!),我的以下实现无法打印参数名称。
function exitIfEmpty()
{
if [ -z "$1" ]
then
echo "Exiting because ${!1} is empty"
exit 1
fi
}
Run Code Online (Sandbox Code Playgroud)
当这样被调用时
exitIfEmpty someKey
应该打印
Exiting because someKey is empty
Run Code Online (Sandbox Code Playgroud)
ilk*_*chu 13
传递给函数的只是一个字符串。如果运行func somevar,传递的是字符串somevar。如果您运行func $somevar,则传递的是变量 的(分词)值somevar。也不是变量引用、指针或类似的东西,它们只是字符串。
如果要将变量的名称传递给函数,然后查看该变量的值,则需要使用 nameref(Bash 4.3 或更高版本,IIRC)或间接引用${!var}。${!var}扩展为名称存储在 中的变量的值var。
因此,您只是在脚本中以错误的方式使用它,如果您将变量的名称传递给函数,则使用"${!1}"来获取名为 in 的变量的值$1,并使用plain"$1"来获取名称。
例如,这将打印variable bar is empty, exiting,并退出外壳:
#!/bin/bash
exitIfEmpty() {
if [ -z "${!1}" ]; then
echo "variable $1 is empty, exiting"
exit 1
fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar
Run Code Online (Sandbox Code Playgroud)