답변:
Bash에서 적어도 다음 명령 은 $ var이 비어 있는지 테스트 합니다 .
if [[ -z "$var" ]]; then
# Do what you want
fi
명령 man test
은 당신의 친구입니다.
./test.ksh[8]: test: argument expected
이유를 알지 못하지만 단일 괄호는 작동하지 않지만 이중 괄호는 효과가 없었습니다.
if test -z "$var"
에는 맞습니까?
set -u
옵션이 활성화 된 경우이 테스트는 실패합니다 unbound variable
. 이 경우 @alexli의 솔루션을 선호 할 수 있습니다.
배쉬 추정 :
var=""
if [ -n "$var" ]; then
echo "not empty"
else
echo "empty"
fi
-z
:[[ -z "$an_unset_or_empty_var" ]] && echo empty
-z
요청 된 것에 더 가까운 것이 사실입니다 . Jay는 이것을 그의 대답에 넣었습니다. 그래서 나는 내 것을 업데이트하지 말고 그대로 둡니다.
나는 또한 보았다
if [ "x$variable" = "x" ]; then ...
이것은 매우 강력하고 독립적입니다.
또한 "빈"과 "설정되지 않은"사이에는 차이가 있습니다. Bash 셸 스크립트에 문자열이 정의되어 있지 않은지 확인하는 방법을 참조하십시오 .
$variable
비어있는 경우 비교 연산자의 왼쪽에있는 문자열은 only가되고 연산자 x
의 오른쪽에있는 문자열과 같습니다. [ x = x ]
"true"이므로 실제로 $variable
는 비어 있는지 여부를 테스트합니다 . 덧붙여서 (실제로 3 년 반 :-)) 나는 -z
아마도 내가 원하는 것을 더 명확한 방식으로 수행하기 때문에 나는 이것을 직접 사용하지 않을 것이지만,이 방법은 종종 "야생적으로"보이기 때문에이 대답을 추가하고 싶었다. 아마도 내가 가진 것과 다른 경험을 가진 사람들이 의도적으로 이런 방식으로 썼을 것입니다.
if [ ${foo:+1} ]
then
echo "yes"
fi
yes
변수가 설정되어 있으면 인쇄 합니다. ${foo:+1}
변수가 설정되면 1을 반환하고 그렇지 않으면 빈 문자열을 반환합니다.
set -u
옵션 ( nounset
)이 활성화 된 경우에도 작동한다는 것 입니다. 이 경우이 질문에 대한 거의 모든 다른 대답은 실패 unbound variable
합니다.
:+
표기법은 선택적 변수로 지정한 선택적 명령 행 매개 변수가있는 경우에도 유용합니다. myprogram ${INFILE:+--in=$INFILE} ${OUTFILE:+--out=$OUTFILE}
if [[ "$variable" == "" ]] ...
[ "$variable" ] || echo empty
: ${variable="value_to_set_if_unset"}
${variable:-default_value}
[ "$variable" ] || exit
true
변수가 설정되지 않았거나 빈 문자열 ( "")로 설정 되면 반환 됩니다.
if [ -z "$MyVar" ]
then
echo "The variable MyVar has nothing in it."
elif ! [ -z "$MyVar" ]
then
echo "The variable MyVar has something in it."
fi
elif !
대신에 사용 else
하시겠습니까?
! [ -z "$MyVar" ]
변수가됨을 의미 가 거기에 뭔가를. 그러나 이상적으로는 사용 else
합니다.
질문은 요청 변수가 빈 문자열인지 확인하는 방법 과 최고의 답변이 이미 주어진다.
그러나 PHP에서 프로그래밍이 끝난 후에 여기에 도착했으며 실제로 Bash 쉘에서 작동하는 PHP 의 빈 함수 와 같은 검사를 찾고있었습니다 .
답변을 읽은 후 Bash에서 올바르게 생각하지 않는다는 것을 깨달았습니다. 그러나 그 순간 어쨌든 같은 기능 PHP에서 비어 가 Bash 코드에서 너무 유용 할 것입니다.
이것이 다른 사람들에게 발생할 수 있다고 생각하면서 Bash에서 PHP 빈 함수를 변환하기로 결정했습니다.
PHP 매뉴얼 에 따르면 :
변수가 존재하지 않거나 값이 다음 중 하나 인 경우 비어있는 것으로 간주됩니다.
물론 null 과 false의 경우는 bash로 변환 할 수 없으므로 생략됩니다.
function empty
{
local var="$1"
# Return true if:
# 1. var is a null string ("" as empty string)
# 2. a non set variable is passed
# 3. a declared variable or array but without a value is passed
# 4. an empty array is passed
if test -z "$var"
then
[[ $( echo "1" ) ]]
return
# Return true if var is zero (0 as an integer or "0" as a string)
elif [ "$var" == 0 2> /dev/null ]
then
[[ $( echo "1" ) ]]
return
# Return true if var is 0.0 (0 as a float)
elif [ "$var" == 0.0 2> /dev/null ]
then
[[ $( echo "1" ) ]]
return
fi
[[ $( echo "" ) ]]
}
사용 예 :
if empty "${var}"
then
echo "empty"
else
echo "not empty"
fi
데모 :
다음 스 니펫 :
#!/bin/bash
vars=(
""
0
0.0
"0"
1
"string"
" "
)
for (( i=0; i<${#vars[@]}; i++ ))
do
var="${vars[$i]}"
if empty "${var}"
then
what="empty"
else
what="not empty"
fi
echo "VAR \"$var\" is $what"
done
exit
출력 :
VAR "" is empty
VAR "0" is empty
VAR "0.0" is empty
VAR "0" is empty
VAR "1" is not empty
VAR "string" is not empty
VAR " " is not empty
Bash 논리 에서이 기능에서 0에 대한 검사는 부작용을 일으킬 수 있다고 말했지만이 기능을 사용하는 사람은이 위험을 평가하고 첫 번째 검사 만 남기고 검사를 중단하기로 결정할 수 있습니다.
설정되지 않은 변수와 설정되어 있고 비어있는 변수를 구별 할 수 있습니다.
is_empty() {
local var_name="$1"
local var_value="${!var_name}"
if [[ -v "$var_name" ]]; then
if [[ -n "$var_value" ]]; then
echo "set and non-empty"
else
echo "set and empty"
fi
else
echo "unset"
fi
}
str="foo"
empty=""
is_empty str
is_empty empty
is_empty none
결과:
set and non-empty
set and empty
unset
BTW, set -u
설정되지 않은 변수를 읽을 때 오류가 발생하는 것을 권장 합니다.
rm -rf $dir
여기 에서 "엄격 모드"에 대한이 모범 사례 및 기타 모범 사례에 대해 읽을 수 있습니다 .