Quali sono le differenze di sintassi tra bash e dash?
Mi sono appena reso conto che nell'attuale versione di Ubuntu /bin/shnon c'è più un link simbolico bash(come lo era per molti anni), ma dashinvece. Mi chiedo quali siano le effettive differenze di sintassi tra queste due shell e quanto sia grande la probabilità che uno script di shell scritto tenendo bashpresente non funzioni dash. Qualcuno può indicarmi una buona e chiara descrizione delle differenze tra questi due?
Risposte
Una semplice regola pratica è: se il tuo script è stato scritto in bash, non dare per scontato che funzionerà in dash. Un elenco completo delle differenze va oltre lo scopo di una semplice domanda e risposta, ma essenzialmente dashè una shell POSIX, quindi implementa ciò che è descritto nella specifica POSIX per il linguaggio shell e solo quello .
Ecco i comuni bashismi di cui più spesso mi imbatto:
[[: il[[ condition ]]costrutto non è supportato dadash, devi[ ]invece usarlo .==: per verificare se due valori sono uguali, utilizzare=nel trattino poiché==non è supportato.source: il comando POSIX per l'acquisizione di uno script è.. Ilsourcebuiltin è un bash alias dello standard., quindi usa sempre. fileinvece disource file.shopt: questo è un builtin di bash che imposta alcune opzioni non standard. Non supportato dadash.$RANDOM: è impostato su un numero casuale a ogni utilizzo inbash, ma non funziona indash.
Il problema di gran lunga più comune è la mancanza di [[supporto. Puoi trovare un elenco più completo sul Wiki di Ubuntu:https://wiki.ubuntu.com/DashAsBinSh