Je viens de m'apercevoir que la syntaxe suivante fonctionnait parfaitement en shell :

true && foo() { echo ok; } || foo() { echo ko; }

Je ne sais pas si je dois trouver ça beau ou pas. Ca a un arrière goût de fonctionnel, mais pas assez pour que ça soit utilisable.