Quali sono le differenze di sintassi tra bash e dash?

Sep 26 2020

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

2 terdon Sep 27 2020 at 01:39

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 da dash, 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 è .. Il sourcebuiltin è un bash alias dello standard ., quindi usa sempre . fileinvece di source file.
  • shopt: questo è un builtin di bash che imposta alcune opzioni non standard. Non supportato da dash.
  • $RANDOM: è impostato su un numero casuale a ogni utilizzo in bash, ma non funziona in dash.

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