如果参数传递给函数,则打印名称

xer*_*xes 5 bash

我写了一个小函数,如果函数参数的值为空,它会退出,如果可能的话,我希望也能够打印参数的名称(不是值!),我的以下实现无法打印参数名称。

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)