Portál AbcLinuxu, 12. května 2025 21:50
if [ -f /foo ] then echo "Soubor existuje" else echo "Soubor neexistuje" fi if [ -f /foo ]; then echo "Soubor existuje"; else echo "Soubor neexistuje"; fi
Řešení dotazu:
[-f /foo] && echo "existuje" || echo "neexistuje"
U příkazu echo
není sice příliš pravděpodobné, že by skončil chybou, ale i tak bych důrazně doporučil si na podobné čuňárny nezvykat.
Nemluvě o tom, že takhle vám to skončí už chybou kvůli spuštění neexistujícího příkazu "[-f
".
[ -d Documents ] && cd neexisujici-adr || echo "neexistuje"je to očekávané chování?
if [ -d Documents ]; then cd neexisujici-adr else echo "neexistuje" fitedy původní dotaz.
Problém spočívá v tom, že konstrukce "c1 && c2 || c3
" spustí příkaz c3
nejen v případě, kdy selhal c1
, ale i tehdy, když c1
uspěje a c2
selže. Takže např.
test -f "$dir" && cd "$dir" || echo "$dir neexistuje"
vám bude tvrdit, že adresář neexistuje, i v případě, že adresář sice existuje, ale příkaz cd
selhal z jiného důvodu (třeba že na něj nemáte access).
[ -f /foo ] && (echo "existuje"; exit) || echo "neexistujeAle o moc čitelnější mi to nepřijde
[ -f /foo ] && (echo "existuje"; exit) || echo "neexistuje
Těsně vedle. Ale kdybyste tam měl "exit 0", tak už byste to obešel. Jenže…
Ale o moc čitelnější mi to nepřijde :-)
Přesně tak. Upřímně řečeno, ty operátory mají IMHO smysl jen v jednoduchých konstrukcích typu
cmd1 && cmd2 && cmd3 && cmd4 && ... cmd || exit 1
U čehokoli komplikovanějšího jsou většinou spíš na škodu než k užitku.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.