引数が関数に渡されると、名前を出力します。

引数が関数に渡されると、名前を出力します。

関数パラメータの値がnullの場合は終了する小さな関数を作成しましたが、可能であれば(値の代わりに)パラメータの名前も印刷できるようにしたいが、次の実装では名前を印刷しません。パラメータの

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。 runの場合、func $somevar変数の(噴射)値が渡されますsomevar。変数参照、ポインタ、または同様のものではなく、文字列にすぎません。

合格したい場合名前変数を関数に変換して表示する変数には、nameref(Bash 4.3以降、IIRC)または間接参照を使用する必要があります${!var}${!var}に名前が格納されている変数の値を展開しますvar

そのため、スクリプトで誤った方法で使用しています。変数名を関数に渡す場合は、次のように取得し"${!1}"ます。$1Plain に名前が付けられた変数の合計は"$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

おすすめ記事