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

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

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

function exitIfEmpty()
{
        if [ -z "$1" ]
        then
        echo "Exiting because ${!1} is empty"
        exit 1
        fi
}

当这样称呼时

exitIfEmpty someKey

应该打印

Exiting because someKey is empty

答案1

传递给函数的只是一个字符串。如果运行func somevar,传递的是字符串somevar。如果运行func $somevar,则传递的是变量 的(分词)值somevar。变量引用、指针或类似的东西都不是,它们只是字符串。

如果你想通过姓名将变量转化为函数,然后查看价值对于该变量,您需要使用 nameref (Bash 4.3 或更高版本,IIRC)或间接引用${!var}${!var}扩展为其名称存储在 中的变量的值var

因此,您只是在脚本中使用了错误的方式,如果您将变量的名称传递给函数,请使用"${!1}"来获取价值中命名的变量的$1和 plain"$1"得到姓名

例如,这将打印variable bar is empty, exiting,并退出 shell:

#!/bin/bash
exitIfEmpty() {
    if [ -z "${!1}" ]; then
        echo "variable $1 is empty, exiting"
        exit 1
    fi
}
foo=x
unset bar
exitIfEmpty foo
exitIfEmpty bar

答案2

将名称作为第二个参数传递

function exitIfEmpty()
{
        if [ -z "$1" ]
        then
        echo "Exiting because ${2} is empty"
        exit 1
        fi
}

exitIfEmpty "$someKey" someKey

答案3

echo "Exiting because \$1 is empty"

应该可以解决问题。

相关内容