( locsemege | 2013. 12. 29., v – 00:02 )

Az a lényeg, ami szerintem nem esett le neked, hogy a parancs visszatér az exit kóddal, majd ennek $? értékét vizsgálod egy test segítségével, csak az a kérdés, minek. A test eredménye épp egy exit kód lesz, amelyre az if vagy végrehajtja, ami a then után van, vagy nem.

Akkor már nem egyszerűbb eleve az eredeti visszatérési értékkel megkínálni az if-et?

Mutatok példát arra, hogy vizsgáljuk, létezik-e egy alkönyvtár, s ha igen, akkor menjünk bele:

if [ -d "$directory" ]; then
  cd "$directory"
  valami parancs
  cd -
fi

Ugyanakkor ezt így is lehet, és szerintem szebb:

if cd "$directory" &>/dev/null; then
  valami parancs
  cd -
fi

A második esetben, ha az if-ben lévő cd sikeresen végrehajtódik, akkor a then utáni valami parancsot megcsinálja, de már bement a $directory-ba, hiszen éppen attól volt sikeres a cd.

Ha viszont nincs az illető alkönyvtár, akkor a cd hibakódot ad vissza, s így az if utáni then ág nem hajtódik végre, s az alkönyvtárba sem mentünk, mert az nem létezik, vagy nincs rá jogunk. A második megoldás ezért is jobb: az elsőben azt is vizsgálni kellene - amit most nem tettem meg -, hogy van-e jogosultságom arra, hogy az adott alkönyvtárba menjek.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE