Quelles sont les différences de syntaxe entre bash et dash?
Je viens de me rendre compte que dans la version actuelle d'Ubuntu, il /bin/shn'y a plus de lien symbolique vers bash(comme c'était le cas pendant de nombreuses années), mais à la dashplace. Je me demande quelles sont les différences de syntaxe réelles entre ces deux shells et quelle est la probabilité qu'un script shell écrit avec bashà l'esprit ne fonctionne pas dash. Quelqu'un peut-il me montrer une bonne et claire description des différences entre ces deux?
Réponses
Une règle de base simple est la suivante: si votre script a été écrit en bash, ne supposez pas qu'il fonctionnera en dash. Une liste complète des différences dépasse le cadre d'un simple Q&R, mais est essentiellement dashun shell POSIX, donc il implémente ce qui est décrit dans la spécification POSIX pour le langage shell et seulement cela .
Voici les bashismes courants dont je tombe le plus souvent sur:
[[: la[[ condition ]]construction n'est pas prise en charge pardash, vous devez utiliser à la[ ]place.==: pour tester si deux valeurs sont égales, utilisez=dans le tiret car==n'est pas pris en charge.source: la commande POSIX de sourcing d'un script est.. Lesourcebuiltin est un alias bash du standard., donc utilisez toujours à la. fileplace desource file.shopt: il s'agit d'un bash intégré qui définit certaines options non standard. Non pris en charge pardash.$RANDOM: ceci est défini sur un nombre aléatoire à chaque utilisation dansbash, mais ne fonctionne pas dansdash.
Le problème de loin le plus courant est le manque de [[soutien. Vous pouvez trouver une liste plus complète sur le wiki Ubuntu:https://wiki.ubuntu.com/DashAsBinSh