명령문에 변수가 있는지 확인해야 합니다 if
. 일부 효과:
if [ -v $somevar ]
then
echo "Variable somevar exists!"
else
echo "Variable somevar does not exist!"
가장 가까운 질문은이것, 실제로 내 질문에 대답하지 않습니다.
답변1
최신 bash(4.2 이상):
[[ -v name_of_var ]]
에서 help test
:
-v VAR, 쉘 변수 VAR이 설정된 경우 참
답변2
당신이 무엇을 의미하는지에 따라 달라집니다존재하다.
변수가 선언되었지만 값이 할당되지 않았는지 여부존재하다?
빈 목록이 할당된 배열(또는 해시) 변수인지 여부존재하다?
nameref 변수가 현재 할당되지 않은 변수를 가리키는지 여부존재하다?
$-
, $#
, 변수를 고려하시나요 $1
? (POSIX는 그렇지 않습니다).
Bourne과 같은 쉘에서 표준적인 방법은 다음과 같습니다.
if [ -n "${var+set}" ]; then
echo '$var was set'
fi
이는 스칼라 변수 및 기타 매개변수에 대해 변수에 값이 할당되었는지 여부(환경, 할당 read
등에서 자동으로 null 또는 null이 아닌 값 for
)를 결정하는 데 사용됩니다.
typeset
또는 명령이 있는 쉘의 경우 declare
다음과 같이 보고되지 않습니다.놓다이미 존재하는 변수발표하다하지만분산( 에서는 zsh
변수를 선언하면 값이 할당되고, 지정되지 않은 경우 기본값이 할당됩니다.)
배열을 지원하는 쉘의 경우(및 다음 과 같이 보고 yash
되지 않음 )zsh
놓다인덱스 0의 요소가 설정되지 않은 경우 배열 변수입니다.
for bash
( ksh93
nor 는 아님 zsh
), 유형 변수용연관 배열, 이는 다음과 같이 보고되지 않습니다.놓다키 "0"이 설정되지 않은 요소입니다.
ksh93
및 bash
유형 변수의 경우이름 참조, nameref 자체가 참조하는 변수가 고려되는 경우에만 true를 반환합니다.놓다.
ksh
, zsh
및 의 경우 bash
더 나은 접근 방식은 다음과 같습니다.
if ((${#var[@]})); then
echo '$var (or the variable it references for namerefs) or any of its elements for array/hashes has been set'
fi
ksh93
및 4.4 이상 zsh
에는 다음 bash
도 있습니다.
if typeset -p var 2> /dev/null | grep -q '^'; then
echo '$var exists'
fi
설정되거나 선언된 변수를 보고합니다.
답변3
답변에서 언급했듯이그래서, 확인하는 방법은 다음과 같습니다.
if [ -z ${somevar+x} ]; then echo "somevar is unset"; else echo "somevar is set to '$somevar'"; fi
여기서 ${somevar+x}는 매개변수 확장으로, var가 설정되지 않은 경우 null로 평가되고, 그렇지 않으면 문자열 "x"가 대체됩니다.
-n
다른 답변이 제안했듯이 using은 변수에 빈 문자열이 포함되어 있는지 확인합니다. 존재 여부를 확인하지 않습니다.
답변4
if set|grep '^somevar=' >/dev/null;then
echo "somevar exists"
else
echo "does not exist"
fi