Bash-də bir dəyişənin boş olduğunu müəyyən etmək üçün necə

Bash-də bir dəyişənin boş olduğunu yoxlamaq üçün necə?

235
17 июня '10 в 14:00 2010-06-17 14:00 Ağac 17 iyun 'da 14: 00-da başlayacaq. 2010-06-17 14:00
@ 10 cavab

Başda, ən azı $ command var boş olduqda aşağıdakı komanda test edir:

 if [[ -z "$var" ]]; then #do what you want fi 

man test əmri sizin dostunuzdur.

343
17 июня '10 в 20:09 2010-06-17 20:09 Cavab Jay tərəfindən 17 İyun '10 'da 20:09' də verildi. 2010-06-17 20:09

Bash hesab:

border=0
 var="" if [ -n "$var" ]; then echo "not empty" else echo "empty" fi 
94
17 июня '10 в 14:04 2010-06-17 14:04 Cavab 17-dən 10-da saat 14: 00-da ChristopheD tərəfindən verilir. 2010-06-17 14:04

Mən də gördüm

 if [ "x$variable" = "x" ]; then ... 

Əlbəttə ki, bu, çox etibarlı və müstəqil qətidir.

Bundan əlavə, "boş" və "müəyyən edilməmiş" arasında fərq var. Bash kabuğunda bir simli müəyyən edilmiş olub-olmadığını müəyyən etmək üçün necə baxın ? .

45
01 февр. Cavab Daniel Andersson'a verildi 01 Fevral. 2012-02-01 17:30 '12 saat 17:30 'da 2012-02-01 17:30
 if [ ${foo:+1} ] then echo "yes" fi 

dəyişən müəyyən edildikdə yes göstərilir. ${foo:+1} dəyişən təyin edildikdə 1 qaytarır, əks halda boş bir qayda qaytarır.

28
01 авг. cavab alexli 01 aug verilir . 2012-08-01 15:39 '12 at 3:39 pm 2012-08-01 15:39
 [ "$variable" ] || echo empty : ${variable="value_to_set_if_unset"} 
8
18 июня '10 в 13:46 2010-06-18 13:46 Cavab 18 iyun, saat 13: 46-da pixelbeat verildi. 2010-06-18 13:46
 if [[ "$variable" == "" ]] ... 
7
17 июня '10 в 14:02 2010-06-17 14:02 cavab 17 iyun 17: 09 -da saat 14: 00 -da başlayacaq

sual , dəyişənlərin boş bir düstur olub olmadığını yoxlamaq üçün soruşur və bunun üçün ən yaxşı cavablar verilmişdir.
Amma php proqramlaşdırma yolundan keçən bir dövrdən sonra buraya gəldim və həqiqətən aradığım şey bash qabığında çalışan boş php funksiyası kimi bir test idi.
Cavabları oxuduqdan sonra başa düşdüm ki, bashdə düzgün düşünmürdüm, amma bir anda, php-də boş kimi bir funksiya mənim baş kodumda rahat olardı.
Hesab edirəm ki, bu başqalarına baş verə bilər, mən php boş funksiyasını bash-ə çevirmək qərarına gəldim

Php dərsinə görə:
Bir dəyişən yoxdur və ya dəyəri aşağıdakılardan biri olduqda boş sayılır:

  • "(boş simli)
  • 0 (tam ədəd 0)
  • 0.0 (float olaraq 0)
  • "0" (simli olaraq 0)
  • boş array
  • dəyişən, lakin dəyərsiz elan etdi

Əlbəttə, null və saxta hallar basa çevrilə bilməz, buna görə də onlar atılır.

 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 "" ) ]] } 



İstifadə nümunəsi:

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



Demo versiyası:
aşağıdakı fraqment:

 #!/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 

çıxışlar:

 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 məntiqində, bu funksiyaya sıfır yoxlanılması imho yan problemlərə səbəb ola biləcəyini söyləyərək, bu funksiyanı istifadə edən hər kəs bu riskin qiymətləndirilməsini və bu çekləri azaltmağı qərara ala bilər və yalnız ilkini tərk edir.

6
31 авг. cavab Luca Borrione tərəfindən verilir 2012-08-31 23:20 '12 saat 23:20 'da 2012-08-31 23:20

Değişken ayarlanmamışsa və ya boş bir dizeye ("") ayarlanırsa, bu true olacaq.

 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 
6
04 нояб. Cavab 3 ksc 04 noyabr tarixində verilir. 2015-11-04 03:50 '15 'da 3:50' de, 2015-11-04 03:50

Ayırdılmayan dəyişənlər və müəyyən və boş olan dəyişənlər arasında fərq qoymaq olar:

 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 

Nəticə:

 set and non-empty set and empty unset 

Yeri gəlmişkən, mən set -u istifadə edərək məsləhət görürəm ki, bu unset dəyişənləri oxuduğunda səhv gətirə bilər, belə ki, bu sizi fəlakətdən xilas edə bilər.

 rm -rf $dir 

Bu və digər ən yaxşı təcrübələr haqqında burada "yüksək təhlükəsizlik" haqqında oxuya bilərsiniz .

2
15 июня '16 в 17:09 2016-06-15 17:09 cavab 15 iyun '17 'də saat 17:09 ' də verildi. 2016-06-15 17:09

V qurulduğunu yoxlamaq üçün

 if [ "$v" == "" ]; then echo "v not set" fi 
1
06 июня '16 в 21:45 2016-06-06 21:45 cavab 06 iyun 'da saat 21 : 45-də 2016-06-06 21:45 smishra tərəfindən verilir

tags ilə bağlı digər suallar və ya sual verin