함수 매개변수의 값이 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}"
사용하여 가져옵니다.값$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
답변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"
그러면 문제가 해결될 것입니다.