Jeg ville vite om skript skrevet for dash, ash og sh er 100% kompatible?
Er det noen ekstra funksjoner til dash eller aske, eller syntaksendring?
Fra det jeg hørte, er ash en direkte etterkommer av sh.
Kommentarer
Svar
Det korte svaret er nei, de «er ikke 100% kompatibel.
Men de fleste skjellene er ganske nær det grunnleggende, så du vil bare sjelden støte på inkonsekvenser. de fleste skjell skiller seg ikke mye ut ved tilsatt syntaks, men med noen ekstra funksjoner som fullføring av tabulatorer og lignende.
Dessuten er dash
en slags etterkommer av ash
— eller port fra BSD til Linux, for å være presis. Og alle av dem skal være etterkommere eller forskjellige implementeringer av sh
. Faktisk sh
er på de fleste systemer bare en symlink til bash
, dash
eller noe annet. Det som betyr noe er POSIX-samsvar —, og når du skriver skript i henhold til standardene, vil du ikke støte på problemer.
Forskjellen mellom disse skjellene er i optimaliseringer og ytelse. De er mindre funksjonsrike enn bash
, men de er helt legitime skall. Bash er funksjonsrikt for interaktivt arbeid, men bruker for eksempel mer minne.
Kommentarer
- Men for skriptbruk er de kompatible?
- Og om POSIX-samsvar, selv om jeg følger den standarden, hvis et skript er skrevet for Bash, tror jeg ikke det vil kjøre på hvilken som helst sh eller dens etterkommer
- De burde være kompatible med hverandre hvis du ' ikke bruker noen uklare funksjoner. Men hvis du bruker bash-skript, kan det hende du får flere problemer.
- har aldri tenkt å bruke bash med sh eller aske eller dash. Hva er de uklare funksjonene?
- mange av bash ' s nyere funksjoner er tillegg over POSIX, så det er stadig mer sannsynlig at du vil skrive unportabel kode hvis du ' bruker dem. IIRC selv [[]] – konstruksjonen er ikke i sh. Vær også oppmerksom på at hvis du ' ikke skriver et rent skallskript, kommer også forskjell i verktøy til spill (forskjellige versjoner av sed, grep, awk …).
Svar
Det bør nevnes at på noen systemer, spesielt Debian, / bin / ash er ikke tilgjengelig:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Kommentarer
- De har muligens aske i opptaksboksen.
- Når det er sagt, er det mange systemer som ikke ' t har
bash
heller.
man ash
checkbashisms
for å teste at skriptet ditt er POSIX-kompatibelt.