Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: webhope 05. 05. 2010, 23:42:56

Název: Podmínka v bashi
Přispěvatel: webhope 05. 05. 2010, 23:42:56
Zdravím,
fakt neexistuje v bashi nějaká obdoba následujícího příkazu?
Kód: [Vybrat]
first= [[ $first == "one" ]] ? 1 : 0;

Mě to už nebaví psát pořád ty zdlouhavé podmínky if ; then fi  (vypadá to nepřehledně, když se to hlouběji vnořuje) ; Konkrétně u toho podmíněného přiřazování var=condition?1:0; by se to hodilo. Fakt tu v bashi není tento příkaz nebo to jen špatně píšu?
Název: Re: Podmínka v bashi
Přispěvatel: Atrament 06. 05. 2010, 01:51:11
[ $first = one ] && first=1 || first=0
Název: Re: Podmínka v bashi
Přispěvatel: webhope 06. 05. 2010, 12:06:07
To je asi malá chyba (== místo =), ale díky!

Zkoušel jsem dvě věci:
toto nefunguje:

[[ $temp == "Změnit" ]] && ( [[ $first == "1" ]] && first="0" || first="1" )

toto funguje:
[[ $temp == "Změnit" ]] &&  { [[ $first == "1" ]] && first="0" || first="1" ; }
neboli
if [[ $temp == "Změnit" ]]; then [[ $first == "1" ]] && first="0" || first="1" ; fi;

Šlo mi o to udělat jakýsi přepínač hodnot
Název: Re: Podmínka v bashi
Přispěvatel: deadmail 06. 05. 2010, 16:30:56
Kód: [Vybrat]
[ "$temp" == "Změnit" ]] && first=$((1-first))
Název: Re: Podmínka v bashi
Přispěvatel: . 06. 05. 2010, 16:52:06
To je asi malá chyba (== místo =), ale díky!
Není.
Název: Re: Podmínka v bashi
Přispěvatel: webhope 07. 05. 2010, 11:57:31
Deadmail:
Tobě tam vypadla hranatá závorka.

Atrament:
Tak tomu nerozumím

Ještě prosím o pomoc s touhto podmínkou, nevede se mi vrátit hodnotu poslední položky v poli
Kód: [Vybrat]
[[ $i -eq ${#content[@]}-1 ]]
výsledek:
Kód: [Vybrat]
+ [[ -1 -eq 23-1 ]]místo
Kód: [Vybrat]
+ [[ -1 -eq 22 ]]
Název: Re: Podmínka v bashi
Přispěvatel: . 07. 05. 2010, 12:26:26
A co se ti na tom nelíbí ?
Název: Re: Podmínka v bashi
Přispěvatel: webhope 07. 05. 2010, 12:29:52
A co se ti na tom nelíbí ?

Kód: [Vybrat]
${#content[@]}-1 nevrací číselný výsledek
Edit:

No nic, už jsem to vyřešil:
Kód: [Vybrat]
[[ $i -eq $(( ${#content[@]}-1)) ]];
Název: Re: Podmínka v bashi
Přispěvatel: Atrament 07. 05. 2010, 20:51:42
v BASHi se běžně porovnává jenom jedním rovnítkem jenom musí být mezi rovnítkem a hodnotami na obou stranách mezera, takto: $promenna = 10 takhle jde o porovnání, kdyby to bylo takto: $promenna=10 (bez těch mezer) tak jde o přiřazení.
Název: Re: Podmínka v bashi
Přispěvatel: . 09. 05. 2010, 17:00:08
Kód: [Vybrat]
${#content[@]}-1 nevrací číselný výsledek

Hmm
Kód: [Vybrat]
$ [[ 2 -eq 4-2 ]] && echo plati
plati
$ foo=(a b c d); [[ 2 -eq ${#foo[@]}-2 ]] && echo plati
plati
Název: Re: Podmínka v bashi
Přispěvatel: Jirka 10. 05. 2010, 00:40:03
v BASHi se běžně porovnává jenom jedním rovnítkem jenom musí být mezi rovnítkem a hodnotami na obou stranách mezera, takto: $promenna = 10 takhle jde o porovnání, kdyby to bylo takto: $promenna=10 (bez těch mezer) tak jde o přiřazení.

To fakt ne, jestli je něco porovnání nebo přiřazení se fakt neřídí mezerama (ale mohou být v některých případech povinné a v jiných zakázané). V POSIX shellu je porovnání:

V Bashi je navíc [[, možnost používat == v hranatých závorkách a spousta jiných možností, jak zařídit aritmetické vyhodnocení.

Přiřazení:
Název: Re: Podmínka v bashi
Přispěvatel: webhope 13. 05. 2010, 11:01:56
Díky za reakce a obzvlášť Jirkovy