Was sind Syntaxunterschiede zwischen Bash und Dash?
Ich habe gerade festgestellt, dass in der aktuellen Ubuntu-Version /bin/shnicht mehr mit bash(wie früher für viele Jahre) verbunden ist, sondern mit dash. Ich frage mich, was die tatsächlichen Syntaxunterschiede zwischen diesen beiden Shells sind und wie groß die Wahrscheinlichkeit ist, dass ein Shell-Skript, für das geschrieben bashwurde, nicht funktioniert dash. Kann mich jemand auf eine gute und klare Beschreibung der Unterschiede zwischen diesen beiden hinweisen?
Antworten
Eine einfache Faustregel lautet: Wenn Ihr Skript in Bash geschrieben wurde, gehen Sie nicht davon aus, dass es in Bindestrich funktioniert. Eine vollständige Liste der Unterschiede würde den Rahmen einer einfachen Frage- und dashAntwortrunde sprengen, ist jedoch im Wesentlichen eine POSIX-Shell und implementiert daher das, was in der POSIX-Spezifikation für die Shell-Sprache beschrieben ist, und nur das .
Hier sind die häufigsten Bashismen, denen ich am häufigsten zuwiderläuft:
[[: Das[[ condition ]]Konstrukt wird nicht von unterstütztdash, Sie müssen es[ ]stattdessen verwenden.==: Um zu testen, ob zwei Werte gleich sind, verwenden Sie=in Bindestrich, da dies==nicht unterstützt wird.source: Der POSIX-Befehl zum Sourcing eines Skripts lautet.. Dassourceeingebaute ist ein Bash-Alias für den Standard., verwenden Sie also immer. fileanstelle vonsource file.shopt: Dies ist eine integrierte Bash, die bestimmte nicht standardmäßige Optionen festlegt. Wird von nicht unterstütztdash.$RANDOM: Dies wird bei jeder Verwendung in auf eine Zufallszahl gesetztbash, funktioniert aber nicht indash.
Das mit Abstand häufigste Problem ist der Mangel an [[Unterstützung. Eine umfassendere Liste finden Sie im Ubuntu-Wiki:https://wiki.ubuntu.com/DashAsBinSh