1872 votes

Différence entre sh et bash

Lorsque vous écrivez des programmes shell, nous utilisons souvent et . J’utilise habituellement `` , mais je ne sais pas quelle est la différence entre eux.

Quelle est la différence principale entre et ?

Que nous faut-il pour être informé lors de la programmation en et ?

1566voto

Roman Cheplyaka Points 15145

Qu'est-ce que sh

sh (ou de la Commande Shell Language) est un langage de programmation décrite par la norme POSIX standard. Il a de nombreuses implémentations (ksh88, dash, ...). bash peut également être considéré comme une œuvre d' sh (voir ci-dessous).

Parce qu' sh est une spécification, une mise en œuvre, /bin/sh est un lien symbolique (ou un lien en dur) pour une mise en œuvre effective sur la plupart des systèmes POSIX.

Qu'est-ce que bash

bash a commencé comme un sh-compatible mise en œuvre (même si elle est antérieure à la norme POSIX par quelques années), mais comme le temps passait, il a acquis de nombreuses extensions. Beaucoup de ces extensions peuvent modifier le comportement de valable POSIX scripts shell, par lui-même bash n'est pas valide, le shell POSIX. C'est plutôt un dialecte du shell POSIX langue.

bash prend en charge une --posix de l'interrupteur, ce qui rend plus conforme à POSIX. Il tente également d'imiter POSIX si invoquée sh.

sh == bash?

Pendant un long moment, /bin/sh utilisée pour pointer /bin/bash sur la plupart des systèmes GNU/Linux. En conséquence, il était presque devenu sans ignorer la différence entre les deux. Mais cela a commencé à changer récemment.

Certains des exemples de systèmes où l' /bin/sh n'a pas de point d' /bin/bash (et sur certains /bin/bash peut même ne pas exister) sont:

  1. Moderne Debian et Ubuntu systèmes, qui symlink sh de dash par défaut;
  2. Busybox, qui est généralement de s'exécuter lors de la Linux démarrage du système dans le cadre de l' initramfs. Il utilise l' ash shell de mise en œuvre.
  3. Les bsd. OpenBSD utilise pdksh, un descendant du Korn shell. FreeBSD sh est un descendant de l'UNIX d'origine Bourne shell.

Ligne Shebang

En fin de compte, c'est à vous de décider lequel utiliser, par écrit, le «shebang» de ligne.

E. g.

#!/bin/sh

utilisera sh (et tout ce qui arrive à point),

#!/bin/bash

utilisera /bin/bash si elle est disponible (et échouer avec un message d'erreur si elle n'est pas). Bien sûr, vous pouvez également spécifier une autre mise en œuvre, par exemple

#!/bin/dash

Lequel utiliser

Pour mes propres scripts, je préfère sh , pour les raisons suivantes:

  • il est normalisé
  • il est beaucoup plus simple et plus facile à apprendre
  • il est portable sur les systèmes POSIX - même s'il leur arrive de ne pas avoir d' bash, ils sont tenus de disposer d' sh

Il y a des avantages à l'aide d' bash . Ses caractéristiques en font une programmation plus pratique et similaire à la programmation dans d'autres langages de programmation modernes. Ces inclure des choses comme la portée des variables locales et des tableaux. Plaine sh est un très minimaliste langage de programmation.

197voto

Rein Henrichs Points 3592

SH : http://man.cx/sh bash : http://man.cx/bash

TL ; DR: bash est un sur-ensemble de sh avec une syntaxe plus élégante et plus de fonctionnalités. Il est sécuritaire d’utiliser une ligne de shebang bash dans presque tous les cas, car il est tout à fait omniprésent sur des plateformes modernes.

NB : dans certains environnements, sh est bash. Vérifier `` .

2voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X