Portál AbcLinuxu, 10. května 2025 08:35

Dotaz: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné

30.7.2012 15:03 MM
BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Přečteno: 1145×
Odpovědět | Admin
Ahoj, jak můžu napsat podmínku v bashi která zjistí jestli je pole prázdné nebo něco obsahuje. Díky
if [ ${MYARRAY} ]
then
 echo "Pole je plne"
else
 echo "Pole je prázdné"
fi

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (iKoulee)
30.7.2012 15:18 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Odpovědět | | Sbalit | Link | Blokovat | Admin
Například (prázdnost)
test ${#MYARRAY[*]} = 0
30.7.2012 16:13 MM
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Nevím jak jsi to myslel ale tohle nefunguje
if [ ${#MYARRAY[*]} = 0 ]
then
 echo "Pole je prázdné"
else
 echo "Pole je plné"
fi
30.7.2012 16:33 NN
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
funguje
30.7.2012 22:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
To ${#MYARRAY[*]} vrací počet prvků pole.
MYARRAY=
echo "Počet prvků v poli: ${#MYARRAY[*]}"

for((i=0;i<${#MYARRAY[*]};i++)) {
    echo "${#MYARRAY[i]}"
}
Počet prvků v poli: 1
0
unset MYARRAY
echo "Počet prvků v poli: ${#MYARRAY[*]}"

for((i=0;i<${#MYARRAY[*]};i++)) {
    echo "${#MYARRAY[i]}"
}
Počet prvků v poli: 0

31.7.2012 12:49 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Odpovědět | | Sbalit | Link | Blokovat | Admin
test -z $A && echo nic || echo nieco
31.7.2012 17:24 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
A=('' Gotcha)
1.8.2012 00:31 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
test -z ${A[*]} && echo nic || echo nieco
1.8.2012 00:57 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Tak schválně, co myslíš, že to udělá při
A=(Ignorance strikes back)
?
1.8.2012 15:57 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
test -z "${A[*]}" && echo nic || echo nieco
David Watzke avatar 1.8.2012 20:35 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Stále kravina...
$ A=('')
$ echo ${#A[*]}
1
$ test -z "${A[*]}" && echo nic || echo nieco
nic
Vzdej to už :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
6.8.2012 11:26 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
aha, a co vlastne to pole obsahuje? vypis mi jeho prvky.
6.8.2012 12:58 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Obsahuje jeden prázdný řetězec ''.

Prázdný řetězec je plnohodnotný prvek pole, i když při výpisu na váš terminál se shodou okolností nevypíše žádný znak :)

Je to jako prázdná krabice od bot. Někoho sice zajímají výhradně ty boty, protože je třeba obuvník, tak všude vidí jen boty boty boty, ale skladníka zajímají i prázdné krabice.

Pokud mi někdo předal prázdnou krabici od bot bez tří mega (pole s prázdným řetězcem), je to zcela jiná situace, než kdyby žádná předávka vůbec neproběhla (prázdné pole).
6.8.2012 18:03 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
miesas hrusky s jablkami. krabica je krabica, topanky su topanky. ak je krabica pole K a topanky prvok K0, tak pole nie je prazdne. ak tam ziadne topanky nie su, tak pole je prazdne, a je jedno, ci tam bude este nejaka igelitka z topanok alebo nie, pretoze v konecnom dosledku je krabica prazdna.
David Watzke avatar 6.8.2012 18:18 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Takže tohle je pro tebe taky prázdný pole?
const char p[] = {0, 0};
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
6.8.2012 18:46 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Právo na tento názor ti nikdo nebere, ale tvůrci bashe to zjevně vidí jinak -- jak zde bylo již několikrát demonostrováno.
6.8.2012 19:47 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
ak je krabica pole K

Krabice není pole K. špatný předpoklad => špatný závěr. Kraice je plnohodnotný prvek pole, ať je prázdná nebo plná.
7.8.2012 07:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Ale nelze popřít existenci krabice…
Kolik prvků má tedy pole v mém příkladu níže?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.8.2012 13:28 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Třeba takto:
#!/bin/bash
A=('' '6*9' '' '42')
#A=('')
echo "Pole A obsahuje: ${#A[@]} položek"
for (( i=0 ; i < ${#A[@]} ; i++ ))
do
  echo "Prvek $i má hodnotu: '${A[$i]}'"
done
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
1.8.2012 00:59 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Odpovědět | | Sbalit | Link | Blokovat | Admin
V linuxe je v sekcii 1 manualova stranka "test" (man 1 test)

Cast zaujimava pre tento problem:
       -n STRING
              the length of STRING is nonzero

       STRING equivalent to -n STRING

       -z STRING
              the length of STRING is zero
Cize moznost je if [ -n "${MYARRAY}" ], alebo if [ -z "${MYARRAY}" ] a potom spravne then/else.
Kedze je uz pokrocili cas, tak som to pre istotu aj odskusal :)
$ MYARRAY=a
$ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
Pole je plne
$ MYARRAY=
$ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
Pole je prázdné
$
Pre zjednodusenie sa to da -n uplne vypustit, ale potom by menej znalym uz nemuselo byt jasne o co ide :)
$ MYARRAY=a
$ if [ "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
Pole je plne
$ MYARRAY=
$ if [ "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
Pole je prázdné
$
a mala drobnost na zaver. Tie uvodzovky tam maju svoje miesto ... kedze:
$ MYARRAY="a b"
$ if [ -n ${MYARRAY} ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
-bash: [: a: binary operator expected
Pole je prázdné
$ if [ -n "${MYARRAY}" ]; then  echo "Pole je plne"; else  echo "Pole je prázdné"; fi
Pole je plne
$
Bez uvodzvoviek shell cely string najprv rozdeli podla $IFS a na zaklade toho dosadi ako argumenty. Inak povedane v provom priklade vidi test "-n a b" a to nie je co ocakava ...
1.8.2012 01:23 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
To je, s prominutím, totální hovadina.

Ukázky neobsahují jediné [víceprvkové] pole.

Pro pole a expanduje ${a} na obsah prvního prvku. Takže uvedné testy nefungují ani pro výše uvedený příkad http://www.abclinuxu.cz/poradna/linux/show/363461#7 a viz také příspěvek od Ashe http://www.abclinuxu.cz/poradna/linux/show/363461#5

Obecně stringovými testy prostě neodlišíš nenastavené prvky od prázdných:
a=('')
vytvoří pole o jednom prázdném prvku, což není totéž jako prázdné pole, které vytvoří například
unset a
declare -a a
1.8.2012 16:00 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
$ A=(" ")
$ test -z "${A[*]}" && echo nic || echo nieco
nieco
$ A=(' ')
$ test -z "${A[*]}" && echo nic || echo nieco
nieco
$ A=('')
$ test -z "${A[*]}" && echo nic || echo nieco
nic
$ A=("")
$ test -z "${A[*]}" && echo nic || echo nieco
nic
1.8.2012 16:21 l4m4
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Ano, tak to je. Stringové testy neodpovídají na otázku po prázdnosti pole. Ale nerozumím, proč to sem znovu vkládáš. Stejně jako nerozumím, proč pole vytváříš
a=(' ')
i
a=(" ")
když rozdíl je pouze v zápisu, obsah proměnné bude identický.
7.8.2012 14:42 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: BASH - Podmínka pro kontrolu jestli je pole prázdné/plné
Pravda, nemal som pridavat koment tak neskoro vecer :) Ja som trosku ovplyvneni aj programovanim v C. Tam je kazdy retazec v podstate pole znakov. V sheli si ani nepamatam kedy som naposledy pouzil pole znakov ... ten moj koment mozte ignorovat, lebo je to pre iny pripad ... a ja nabuduce nebudem nic pridavat neskoro v noci :)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.