얼마나 있는지 bash 가변입니다 빈?

가장 좋은 방법은 어떤 것이 있는지 가변으로 bash 비워집니다 (&quot ";)?

얘기를 들은 것이 나는한다 '만약 [x $ variable&quot "; = &quot x"; ] '

    • 운행에서어떠한 올바른 것은? (좀 더 쉽게 있어야 합니다.)
질문에 대한 의견 (1)
해결책

이 경우 설정해제하거나 설정되었습니다 반환되므로 flashcopy 가변입니다 빈 문자열 (&quot ";).

if [ -z "$VAR" ];
해설 (10)

39 를 않을 때, 포탄 때문에 어려움을 겪고 있는 you& bash, re 포터블식 don& # 39, t 지원 it, 항상 이중 브래킷에서 사용하여 구문.

다음 중 하나:

if [[ -z $variable ]]
if [[ -z "$variable" ]]
if [[ ! $variable ]]
if [[ ! "$variable" ]]

39, t, bash 연산뿐 사용하여 대괄호의 견적 aren& 필요하다. 은 변수의 값을 포함할 수 있는 테스트 간소화할 수 있습니다.

if [[ $variable ]]

이 구문은 호환됩니까 ksh (최소한 ksh93 어쨌든). 본 셸 같은 POSIX 순결케 작업하십시오 않는 이상 sh 또는 대시입니다.

참조 제 대답은 hereBashFAQ/031 의 차이점에 대한 자세한 내용은 연산뿐 및 단일 대괄호의.

테스트하려면 가변입니다 해제할 경우 특별히 볼 수 있습니다 () 로 구분되어 빈 문자열):

if [[ -z ${variable+x} ]]

여기서 &quot x"; 가 임의의.

궁금해할까봐 서버인지에 가변입니다 nulll 해제할 수는 없습니다.

if [[ -z $variable && ${variable+x} ]]
해설 (9)

배시 (및 기타 posix 호환 쉘로) 를 할 수 있는 세 가지 변수로 다음과 같은 뜻이 있다.

  • 해제할
  • 빈 문자열을 설정되었습니다
  • 문자열 세트를 없음

대부분의 시간을 다운로드되었는지 됩니다 하지만 가끔 비어 있지 않은 한 세트를 가변입니다 문자열이어야 it& # 39 의 중요한 설정되었습니다 해제할 구별할 수 있으며 빈 구체화하십시오.

다음 예제일 얼마나 다양한 가능성을 높이고, 또는 기타 posix 호환 쉘로 작동하잖아 bash 테스트할 수 있습니다.

if [ -z "${VAR}" ]; then
    echo "VAR is unset or set to the empty string"
fi
if [ -z "${VAR+set}" ]; then
    echo "VAR is unset"
fi
if [ -z "${VAR-unset}" ]; then
    echo "VAR is set to the empty string"
fi
if [ -n "${VAR}" ]; then
    echo "VAR is set to a non-empty string"
fi
if [ -n "${VAR+set}" ]; then
    echo "VAR is set, possibly to the empty string"
fi
if [ -n "${VAR-unset}" ]; then
    echo "VAR is either unset or set to a non-empty string"
fi

그러나 이 같은 일이 되어 표 양식:

<! - 언어: &gt 랑 없음 -;

                        +-------+-------+-----------+
                VAR is: | unset | empty | non-empty |
+-----------------------+-------+-------+-----------+
| [ -z "${VAR}" ]       | true  | true  | false     |
| [ -z "${VAR+set}" ]   | true  | false | false     |
| [ -z "${VAR-unset}" ] | false | true  | false     |
| [ -n "${VAR}" ]       | false | false | true      |
| [ -n "${VAR+set}" ]   | false | true  | true      |
| [ -n "${VAR-unset}" ] | true  | false | true      |
+-----------------------+-------+-------+-----------+

$ {} '이' 수 '가 빈 문자열을 VAR+foo chunghwa 확장됨 경우' VAR 를 foo "만약 'var' 로 설정되었습니다 설정해제하거나 '모든 것 (빈 문자열을 포함).

$ {} '이' var 푸 chunghwa 확장됨 값에 대한 'var "만약 집합 (set 를 포함한 빈 문자열)' 와 'foo 해제할 경우. 이 제공하는 사용자 무시가능한 설정값으로 유용하게 사용할 수 있다 (예를 들면, '$ {붉은 색}' 있다고 말한 '레드' 변수 '컬러' 를 사용하지 않는 한 설정되었습니다 뭔가).

이유는 ' [x&quot, $ {} &quot VAR. = x] '는 종종 빈 문자열은 테스트를 위해 권장됨 서버인지에 가변입니다 설정해제하거나 인컨텍스트 설정되었습니다 때문에 일부 구축' ['명령 (소트트웨어용' test ') 가 갈레라 컴퍼니. 만약 'VAR' like '무언가를 설정되었습니다 잘못된 행동을 할 때 그 때 몇몇 구현들은 -n', ' [&quot, $ {} &quot VAR. = &quot "; 첫 번째 인수를] '때문에' ['가 아닌' 잘못 '-n 연산자입니다 문자열으로 것으로 풀이된다.

해설 (8)

'은' z 최선이다.

39 I& 다른 옵션을 설정할 수 있지만, ve 변수를 사용하는 것은 또 다른 변수가 eg 무시될 수 있다.

export PORT=${MY_PORT:-5432}

'빈' $ MY_PORT 경우 "항구" 라는 질문을 되돌려줍니다 가변입니다 관심용 설정되었습니다 5432, 그렇지 않으면 포트 설정되었습니다 my_port 값에 대한 ''. 구문 포함시키십시오 기록하십시오 콜론과 대시입니다.

해설 (1)

39 건의 빈 설정되었습니다 대對 해제할 경우, re 관심이 you& 구분하는 상태, 봐요 - u 옵션을 내주었다.

$ set -u
$ echo $BAR
bash: BAR: unbound variable
$ [ -z "$BAR" ] && echo true
bash: BAR: unbound variable
$ BAR=""
$ echo $BAR

$ [ -z "$BAR" ] && echo true
true
해설 (0)

39 를 've seen, 대체 I& [- z $ foo&quot "; 그러나] '는 왜 사람들이 이 방법을 사용하여, 다음과 같은 I& # 39 m not 잘 아는 사람?

[ "x${foo}" = "x" ]

어쨌든 you& com/go/4e6b330a_kr 해제할 경우 # 39, re 금지 (통칭 '또는' 에서 '세트 - u - o 설정되었습니다 노운세트') 로, 그 후, # 39 you& ll 실행하십시오 모두 문제 삼고 있다. # 39 의 간단한 수리입니다 there& 이:

[ -z "${foo:-}" ]

참고: 이렇게 하면 leave your 가변으로 우네프.

해설 (1)

이 질문 있는지 확인하는 방법을 묻는 질문에 대한 답변을 한 것에 대해서, 그리고 최고의 이미 빈 문자열을 가변입니다 that.&lt br>; 하지만 난 후에 이곳에 상륙한 지 미리 프로그래밍 동안 내가 실제로 검색: 모함이야 확인란 같은 빈 함수, 배시 shell.&lt br&gt 작업할 미리 , 내가 읽은 후 답변을 하고 있지만, 어쨌든 그 순간 않은 걸 제대로 bash 등의 기능이 있는 제품을 내 빈 php, 배시 code.&lt br&gt 수로 있었을 것이다. 내 생각엔 이 일어날 수 있는 등 다른 기능을 변환하십시오 결심했다고 bash&lt br&gt, php, 빈 &lt br>; [Php 수작업식] [1] 에 따르면 :&lt br>;

  • 변수 고려되는지 doesn& 타임코드가 있거나, 그 값은 빈 경우 t # 39 의 경우 한 following:*&lt br>; &lt ul>; &lt li&gt &quot ";;; (빈 문자열) &lt /li>; (0 값을 정수로), /li&gt &lt &lt li> 0;; (0 을 부동 소수점), /li&gt &lt &lt li&gt 0.0;;; &lt li&gt &quot 0";;; (0 을 문자열으로) &lt /li>; 빈 array&lt /li&gt li&gt <;;; 변수 선언 없이 value&lt /li&gt li&gt <;;; &lt /ul>;
        • 및 거짓값 건 당연하지 nulll 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 "" ) ]]
}

&lt br&gt &lt br>;;; 사용 예제:

if empty "${var}"
    then
        echo "empty"
    else
        echo "not empty"
fi

&lt br&gt &lt br>;;; Demo:&lt br>; 다음 스니핏:


#!/bin/bash

vars=(
    ""
    0
    0.0
    "0"
    1
    "string"
    " "
)

for (( i=0; i
해설 (1)

전체 경우-다음 및 - z 필요하지 않습니다. &lt pre>; [&quot $ foo"; ] &amp &; 에코 &quot empty&quot, foo 아니다. [&quot $ foo"; ], 에코 &quot foo 가 랑하니 empty&quot. &lt /pre>;

해설 (2)

제 5 센트. 또한 보다 더 짧은 구문을. ', "만약 이 번호요:

VALUE="${1?"Usage: $0 value"}"

이 노선은 값을 정할 경우 인수를 통해 줄 번호 앞에 붙인 것으로, 그동안 공급 인쇄 오류 메시지가 스크립트입니다 오류가 있는 경우 (종료시킵니다 것으로, 스크립트 실행).

또 다른 예를 찾아볼 수 있다. abs 안내선 (& # # 187 uxfs 10-7& 검색하겠습니다 171;;).

해설 (0)

개인적으로 더 많은 선택해제합니다 포지셔닝하십시오 확인 방법을:

if [ "${VARIABLE}" == "" ]; then
  echo VARIABLE is empty
else
  echo VARIABLE is not empty
fi
해설 (4)

정확히 언제 FOO $ 및 빈 설정되었습니다 마찬가지입니다.

[ "${FOO+x}" = x ] && [ -z "$FOO" ]
해설 (0)

& # 39 의 mcds 오넬리너 alphastor duffbeer703

#! /bin/bash
[ -z "$1" ] || some_command_that_needs_$1_parameter
해설 (0)

하지만 이 기법을 통해 정확한 답을 실행했음 아닙니다. # 39 의 경우, re 찾는 구체화하십시오 you& 않했노라 &quot 매핑되며, command&quot. 실제로 env 명령의 에 저장할 수 있습니다. 가변으로 후 실행할 때마다 이를 위해 필요한 경우 기술서임을 관심용 브래킷에 없습니다!

예를 들어, 만약 이 명령을 결정하는 you& # 39, re debian:

'그렙 데비안 / proc / 버전인'

전체 예:

IS_DEBIAN="grep -i debian /proc/version"

if $IS_DEBIAN; then
  echo 'yes debian'
else
  echo 'non debian'
fi

그래서 이건 마치 간접적인 방식이 (때마다 이를 실행) 을 확인할지 빈 문자열 (이것은 확인하고 있을 오류 응답을 명령을 있지만, 이는 또한 변화가 발생합니까 복귀할 것으로 빈 문자열).

해설 (0)