BASH:in muuttujia ei tarvitse ilmoittaa ja lisäksi ne ovat heikosti tyyppitettyjä, mutta halutessaan ne voi ilmoittaa. Se tapahtuu declare tai typeset lauseessa:
declare -r muuttuja; luo muuttujan jota voi vain lukea - siis tavallaan const-määrittely.
declare -i muuttuja; luo muuttujan joka tulkitan kokonaisluku-arvoksi (esim.declare -i a; a=1+1; echo $a  # tulostaa 2)  
declare -a muuttuja; luo muuttujan joka tulkitaan matriisiksi
declare -A muuttuja; luo muuttujan joka tulkitaan assosiatiiviseksi matriisiksi
declare -f muuttuja; luo muuttujan joka tulkitaan funktioksi
declare -x muuttuja; luo muuttujan joka saattaa muuttujan myös "lapsi-prosessien" käyttöön.
declare -x var3=373; muuttujalle voidan antaa arvo samalla
declare -ira muuttuja; useampia määrityksiä voidaan myös antaa

**
BASH:issa voi muuttuja olla mikähyvänsä tekstijono ja se tulkitaan silloin funktiokutsuksi. Esimerkiksi:
1. rivillä voi lukea  ; $muuttuja. Se tulkitaan silloin: goto $muuttuja ( siis alkeistapauksessa rivi on kokonaisuudessaan: $muuttuja)
2. muuttuja="echo $((1+1))"; $muuttuja
   - tai monimutkaisempana: awkscript='BEGIN {j=0} {for(i=1;i<=NF;i++) t+=$i; print "rivin",j" summa: ",t; t=0 j++}'; awk "$awkscript" tiedosto(jossa on matriisin arvot)

**
Muuttujan tulostus kun muuttujan arvo saattaa olla määrittelemätön:

Muuttuja1=2; echo ${Muuttuja1-3} # tulostaa: 2
unset Muuttuja1; echo ${Muuttuja1-3} # tulostaa: 3 # unset varmistaa että Muuttujaa1 ei ole määritelty

Muuttuja1=2; echo ${Muuttuja1+3} # tulostaa: 3
unset Muuttuja1; echo ${Muuttuja1+3} # tulostaa: tyhjää # unset varmistaa että Muuttujaa1 ei ole määritelty

Muuttuja1=2; echo ${Muuttuja1=3} # tulostaa: 2
unset Muuttuja1; echo ${Muuttuja1=3} # tulostaa: 3 ja asettaa Muuttujan1 arvoksi 3 # unset varmistaa että Muuttujaa1 ei ole määritelty

Muuttuja1=2; echo ${Muuttuja1?3} # tulostaa: 2
unset Muuttuja1; echo ${Muuttuja1?error} # tulostaa: -bash: Muuttuja1: error # unset varmistaa että Muuttujaa1 ei ole määritelty
 
unset Muuttuja1; echo ${Muuttuja1:-kustaa3} # tulostaa: kustaa3 # "kustaa3" voi olla myös muuttujassa - muuttujan arvoa ei aseteta vaan ainoastaan tulostetaan oletusarvo
**
declare -x print="echo"; $print joo # ja ilmeisesti $print on käytettävissä myös lapsissa
declare -x polku=$kanta/"$KansionNimi"/"$ValitunTeksti"; kanta=/home/petteri; KansionNimi=OMATSKRIPTIT; Valitunteksti=koe; cat $polku
