Portál AbcLinuxu, 10. května 2025 16:28

Dotaz: BASH - Zjištění proměnných

5.3.2013 17:23 KK
BASH - Zjištění proměnných
Přečteno: 1081×
Odpovědět | Admin
Ahoj,
- vytvořím soubor /tmp/go
- nastavím práva x pro spuštění
- spustím soubor /tmp/go
jak můžu teď zjistit, jestli existuje nějaká proměnná kterou jsem sám nenadefinoval? Jedná se mi o to, abych čistě náhodou nepřepsal nějakou proměnnou pokud bych použil stejný název. Děkuji za pomoc
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.3.2013 17:39 pavel
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Odpovědět | | Sbalit | Link | Blokovat | Admin
A proč si to nezkusíš? Vytvoř si dva spustitelné soubory se stejnými proměnnými, ale různými hodnotami. Uvidíš, co se stane (pokud proměnné neexportuješ, tak nic...). Možná by bylo lepší napsat, o co konkrétně se snažíš.
5.3.2013 19:25 potato
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odlišit nenastavenou proměnnou od prázdné není úplně triviální, protože $foo expanduje na totéž. Funguje třeba
if declare -F -p názevproměnné &>/dev/null; then ...
Ale zbytek dotazu, tedy to, k čemu se to snažíš použít, nedává smysl. Shell provádějící /tmp/go má vlastní proměnné prostředí.
6.3.2013 01:21 Atrament
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zjištění zda už existuje proměnná s názvem VAR:

[ "${VAR+existuje}" = existuje ] && echo "existuje" || echo "neexistuje"
6.3.2013 07:54 potato
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Jak tu bylo mnohokrát diskutováno, tahle složená konstrukce s && a || předpokládá určité návratové hodnoty echo, a ty nejsou zaručeny -- k selhání echo stačí například redirect do /dev/full. Nepoužívat.
6.3.2013 08:04 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
if [ -v PROMENNA ] ; then echo 'Promenna PROMENNA nastavena' ; else echo 'Promenna PROMENNA nenastavena' ; fi
6.3.2013 09:06 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Anebo taky:
KDYZ existuje-li PROMNENA; TAK echo 'Promenna PROMENNA nastavena' ; NEBO echo 'Promenna PROMENNA' ; SLUS
:-)
To výše uvedené funguj kde/v čem?

[ "${VAR+existuje} " = existuje ] &&& echo "existuje " || echo "neexistuje "
Je také špatně, minimálně pro ||.

Byť je třeba se některým názvů vyhout nebo vědět (třeba IFS), tak nevím na co je to dobré to zjišťovat, nicméně lze se juknou:
set -o posix ; set
takže se nabízí třeba i něco jako:
( set -o posix ; set ) | grep -q -E "^KUK=.*"
if [ "$?" -eq "0" ]; then echo 'existuje' ; else echo 'neexistuje'; fi
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.3.2013 09:26 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
To výše uvedené funguj kde/v čem?

Přinejmenším v Bashi.

6.3.2013 10:25 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Asi přinejmenším „nějaké verze“, bo:
> bash -version | head -n1
GNU bash, version 3.2.39(1)-release (i586-suse-linux-gnu)
> help test | grep -e '-v'
> PROMENNA='que trabaja'
> if [ -v PROMENNA ] ; then echo 'Promenna PROMENNA nastavena' ; else echo 'Promenna PROMENNA nenastavena' ; fi
-bash: [: -v: unary operator expected
Promenna PROMENNA nenastavena
$ -version | head -n1
GNU bash, verze 4.1.10(4)-release (i686-pc-cygwin)
$ help test | grep -e '-v'
$ PROMENNA='que trabaja'
$ if [ -v PROMENNA ] ; then echo 'Promenna PROMENNA nastavena' ; else echo 'Promenna PROMENNA nenastavena' ; fi
-sh: [: -v: očekáván unární operátor
Promenna PROMENNA nenastavena
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.3.2013 10:29 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Sorry za druhý „nejasný“ výpis:
$ -version | head -n1
GNU bash, verze 4.1.10(4)-release (i686-pc-cygwin)
$ bash
$ help test | grep -e '-v'
$ PROMENNA='que trabaja'
$ if [ -v PROMENNA ] ; then echo 'Promenna PROMENNA nastavena' ; else echo 'Promenna PROMENNA nenastavena' ; fi
bash: [: -v: očekáván unární operátor
Promenna PROMENNA nenastavena
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.3.2013 10:36 Atrament
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
ve 4.2 už to funguje, asi nějaká novinka
6.3.2013 10:59 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
asi nějaká novinka

Ano. Ale nevím, od které verze Bashe byla uvedena. Budu se soustředit na něco přenositelnějšího (jak je zmíněno dolejc).

6.3.2013 11:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
To je to co přesně „nemám rád“, to, že použiji „bashismus“ nevadí, když vím že to dělám pro bash, ale když si vyjedu svůj aktuální man/help a něco tam je, tak to v klidu použiji pak zjistím, že je „módní výstřelek“ dané verze, tak mě to nakrkne… :-(
Píšou tam aspoň „od verze“ myšleno v help test?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
6.3.2013 11:31 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
man bash
-v varname True if the shell variable varname is set (has been assigned a value).

Tzn. že není upozorněno, že je to "specialita".

info bash
-v VARNAME' True if the shell variable VARNAME is set (has been assigned a value).

Tzn. že se znovu nedozvíme, že se jedná o "specialitu".

6.3.2013 10:40 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
bash --version | head -n1
GNU bash, verze 4.2.42(2)-release (x86_64-unknown-linux-gnu)

Mně to funguje.

6.3.2013 11:02 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných

Díky za upozornění.

6.3.2013 10:28 potato
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Tyto http://pubs.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html#tag_02_06_02 by měly fungovat v libovolném POSIXovém shellu, což zahrnuje i uvedené ${x+y}. Jiné jsou bashové speciality.
6.3.2013 13:07 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH - Zjištění proměnných
Odpovědět | | Sbalit | Link | Blokovat | Admin
set
If you hold a Unix shell up to your ear, you can you hear the C.

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.