Portál AbcLinuxu, 9. prosince 2025 13:23
[ $? == 1 ] || [ $? == 255 ] && rm -f $DIALOG; return
Řešení dotazu:
Protože je oddělen středníkem, takže nemá s předchozím složeným příkazem nic společného. Středník je víceméně ekvivalentní konci řádku.
Osobně bych se vykašlal na šetření znaky a upřednostnil srozumitelnost:
if [ $? = 1 -o $? = 255 ]; then rm -f "$DIALOG" return fi
Skládání operátorů || a && je strašně náchylné na chyby a je lepší se mu vyhnout.
[ $? = 1 -o $? = 255 ] && {
rm -f "$DIALOG"
return
}
[ $? = 1 -o $? = 255 ] && {
rm -f "$DIALOG"
return
} || {
echo "Větev else"
}
To je právě to, na co jsem narážel v první odpovědi:
A && B || C
lze použít pouze v případě, kdy máme jistotu, že B nemůže selhat (jako v tom vašem příkladu), jinak se provedou B i C.
To chování je logickým důsledkem pravidel, podle kterých ty operátory fungují:
A && B se druhý příkaz provádí, pokud první vrátí nuluA || B se druhý příkaz provádí, pokud první vrátí nenuluBohužel nadužívání ve skriptech často vede k tomu, že kdo ta pravidla nezná, bere operátory jako if-then a else a pak může být nemile překvapen.
-o v daném místě není přepínač, ale operátor OR.
man testtak je to hned na první stránce společně s dalšími operátory.
test.
info bash je ještě možná lepší.
man [
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.