Linee guida raccomandate per dichiarare le variabili bash / sh

2

Sono in programmazione da BASH da un po 'di tempo e gli script che scrivo stanno iniziando a diventare più complicati.

Mi sono reso conto che ho iniziato a introdurre alcune abitudini da C / C ++ e volevo ottenere conferma se avessi avuto bisogno di rompere le mie attuali abitudini o meno. Il motivo è che non tutti i linguaggi di programmazione sono uguali e dovrebbero essere utilizzati per capitalizzare i loro punti di forza.

Uso delle variabili

function()
{
    #declaration block
    runCommand=

    for string in "$@"; do
        runCommand="$runCommand $string"
    done
}

vs

function()
{
    for string in "$@"; do
        runCommand="$runCommand $string"
    done
}

Che è consigliato per BASH / SH e per quali ragioni?

Attualmente mi sono riferito ai seguenti siti Web.

link

link

link

Modifica: la mia domanda era un po 'oscura, quindi ho leggermente modificato l'esempio di codice.

    
posta Dodzi Dzakuma 27.09.2013 - 09:00
fonte

3 risposte

3

Se non si desidera che le variabili di ambiente ereditate vengano utilizzate come valori iniziali, è importante inizializzare le variabili che si stanno utilizzando (o annullarle in modo esplicito). Una variabile d'ambiente chiamata "runCommand" non influenzerà il tuo primo snipset, sarà usato nel tuo secondo. (Potrebbe trattarsi di una funzione, ma devi esserne a conoscenza).

E devi essere consapevole che questo è vero anche per le variabili che sono interpretate dalla shell (per esempio IFS).

    
risposta data 27.09.2013 - 11:47
fonte
2

Alcune cose che mi piace fare per mantenere i miei script mantenibili:

  • usa le funzioni

    Invece di mettere tutto in un unico file di script gigante, crea diverse piccole funzioni

    Esempio:

    main() {
      # put logic here
    }
    
    main "$@" # pass commandline args to main function
    
  • all'interno delle funzioni, dichiarare le variabili con local modifier

    main() {
      local result
    
      (($1 > 10) && result="greater than" || result="less than"
    }
    
    echo "$result" # result is not visible outside main
    
  • Le variabili

    in bash non sono a blocchi ma con scope lessicale, quindi inserirle in 'blocchi' non ti comprano molto (bash non ha blocchi)

     for i in {1..10}; do
       result=((result + i))
     done
    
     echo "$result" # still visible here
    
  • continuo a pensare che dichiarare le variabili nel punto in cui sono necessarie sia il migliore

Per tornare al tuo esempio il ciclo non è in realtà necessario. Se si desidera eseguire un comando con "$ @" come i parametri basta fare

"$runCommand" "$@"
    
risposta data 27.09.2013 - 09:28
fonte
2

Alcuni suggerimenti.

  • Le variabili locali sono dichiarate locali e inizializzate su null se stringhe o 0 se numero
  • se sviluppi in bash usa bash . (+ =, per arg; do done; ...)
  • Usa sempre incorporato [[notnumber]] o ((numero)) mai [ test, (o qualsiasi altro

    function() {
    local runCommand=
    local -i index=0
      #you don't need the extra parameters here
      for strings; do
       runCommand+=" $strings"
      done 
    }
    

La stragrande maggioranza di bash che puoi trovare online, anche sulla tua distro, è bash basica / impropria se vuoi davvero imparare a Wiki di Greg . È davvero difficile trovare quel tipo di consulenza / conoscenza per Bash.

    
risposta data 18.06.2016 - 18:56
fonte

Leggi altre domande sui tag