Différence sur les parenthèses bash et cendres

J’essayais d’utiliser une commande diff pour comparer les listes de répertoires qui fonctionnent correctement dans bash:

diff <(cd alpha ; find . -type f) <(cd beta; find . -type f) 

Cependant, sur les cendres (périphérique embarqué où aucun autre shell n’est disponible), je reçois

 -ash: syntax error: unexpected "(" 

Y a-t-il une différence en ce qui concerne l’opérateur d’entrée de lecture < ou les parenthèses ( ) ?

Ne confondez pas le crochet dans <( … ) avec celui des redirections comme le cat < file . Dans bash, <( echo hi ) est en fait un fichier avec le contenu "hi" (du moins à des fins de lecture). Donc tu peux faire

 $ cat < <( echo hi ) hi 

Vous pouvez aussi faire

 $ echo <( : ) /dev/fd/63 

Et le shell développe réellement cette substitution de processus en un nom de fichier.

La substitution de processus est une fonctionnalité bash. Il ne fait pas partie de la spécification POSIX et n’existe pas dans les shells tels que les cendres. La redirection , par contre, est POSIX.

La syntaxe <(command) est la substitution de processus et n'est pas prise en charge par le shell de ash (et les autres shells limités / etc.).