Jeg ville vide, om scripts skrevet til bindestreg, aske og sh er 100% kompatible?
Er der tilføjede funktioner til bindestreg eller aske, eller syntaksændring?
Fra hvad jeg hørte, er aske en direkte efterkommer af sh.
Kommentarer
Svar
Det korte svar er nej, de “er ikke 100% kompatibel.
Men de fleste skaller er ret tæt på det grundlæggende, så du ville kun sjældent støde på uoverensstemmelser. Faktisk de fleste skaller adskiller sig ikke meget ved tilføjet syntaks, men ved nogle ekstra funktioner som tab-komplettering og lignende.
Også dash
er en slags efterkommer af ash
— eller port fra BSD til Linux for at være præcis. Og alle skal være efterkommere eller forskellige implementeringer af sh
. Faktisk sh
er på de fleste systemer bare et symlink til bash
, dash
eller noget andet. Det der betyder noget er POSIX-overholdelse —, og når du skriver scripts i henhold til standarderne, vil du ikke løbe ind i problemer.
Forskellen mellem disse skaller er i optimeringer og ydeevne. De er mindre funktionsrige end bash
, men de er fuldt legitime skaller. Bash er funktionsrige til interaktivt arbejde, men bruger f.eks. Mere hukommelse.
Kommentarer
- Men til scriptbrug er de kompatible?
- Og om POSIX-overholdelse, selvom jeg følger denne standard, hvis der er skrevet et script til Bash, tror jeg ikke, det kører på enhver sh eller dens efterkommer
- De skal være kompatible med hinanden, hvis du ' ikke bruger nogle uklare funktioner. Men hvis du bruger bash-script, kan du løbe ind i flere problemer.
- har aldrig tænkt sig at bruge bash med sh eller aske eller bindestreg. Hvad er disse obskure funktioner?
- mange af bash ' s nyere funktioner er tilføjelser i forhold til POSIX, så det er mere og mere sandsynligt, at du vil skrive en ikke-bærbar kode, hvis du ' bruger dem igen. IIRC selv [[]] konstruktionen er ikke i sh. Pas også på, at hvis du ' ikke skriver et rent shell-script, kommer forskelle i værktøjer også i spil (forskellige versioner af sed, grep, awk …).
Svar
Det skal nævnes, at på nogle systemer, især Debian, / bin / ash er ikke tilgængelig:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Kommentarer
- De har muligvis aske i optaget boks.
- Når det er sagt, er der mange systemer, som ikke ' t har
bash
enten.
man ash
checkbashisms
til at teste, om dit script er POSIX-kompatibelt.