Quelles sont les différences de syntaxe entre bash et dash?

Sep 26 2020

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

2 terdon Sep 27 2020 at 01:39

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 par dash, 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 .. Le sourcebuiltin est un alias bash du standard ., donc utilisez toujours à la . fileplace de source file.
  • shopt: il s'agit d'un bash intégré qui définit certaines options non standard. Non pris en charge par dash.
  • $RANDOM: ceci est défini sur un nombre aléatoire à chaque utilisation dans bash, mais ne fonctionne pas dans dash.

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