인수가 함수에 전달되면 이름을 인쇄합니다.

인수가 함수에 전달되면 이름을 인쇄합니다.

함수 매개변수의 값이 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

답변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"

그러면 문제가 해결될 것입니다.

관련 정보