A változók olyan helyek, ahol adatokat tárolhatsz. A Bash kétféle adatot ismer: stringeket és tömböket. A tömbökről később lesz szó.
Így rendelsz értéket egy változóhoz:
name="value"
Fontos: az egyenlőségjel körül nem lehet szóköz!
Ha mégis van szóköz, mint ebben a példában,
x = 10
akkor a bash az x parancsot hívja meg a = és a 10 két argumentummal!
A változókat paramétereknek is nevezhetjük. Ebben a dokumentumban a két kifejezést felváltva használjuk.
Íme néhány fontos paraméter, amelyet a bash használ vagy beállít:
PATH: azon könyvtárak kettősponttal elválasztott listája, amelyekben a külső parancsokat keresi.IFS: a belső mezőelválasztó.
Alább meglátjuk, hogyan használjuk.PWD: az aktuális munkakönyvtárad.
Ugyanaz az értéke, mint a pwd parancs kimenetének.RANDOM: egy álvéletlen egész szám 0 és 32767 között.BASH_VERSION: a futó bash-példány verziószáma.A változónév nagybetűkből, kisbetűkből, számokból és alulvonásból áll. Nem kezdődhet számmal.
Egy paraméter értékét a $varname szintaxissal kapod meg.
x=10
echo "The value of x is $x"
Hogy a változónév ne keveredjen a körülötte lévő szöveggel, kapcsos zárójelbe teheted a változónevet.
Ha például a 10x10 stringet szeretnéd kiírni:
echo "${x}x$x"
# or
echo "${x}x${x}"
Néhány stílusútmutató az esetek többségében a kapcsos zárójelek használatát javasolja az olvashatóság és/vagy a következetesség érdekében.
Ahogy a Parancsok és argumentumok leckében szó volt róla, a parancsok fogadhatnak argumentumokat. A bash-szkriptek sem kivételek. A bash aktuális példányának argumentumait pozíciós paramétereknek nevezzük. Ezeket a speciális paraméterekkel kérheted le:
$1: az első pozíciós paraméter$2 ... $9: a további paraméterek${10} ...: kétjegyű számoknál már kapcsos zárójel kell.$0: az aktuális szkript neve.A shellfüggvények argumentumai is pozíciós paraméterek, és pontosan ugyanígy kezeljük őket. A függvényekről egy későbbi leckében lesz szó bővebben.
Néhány speciális paraméter segít a pozíciós paraméterek kezelésében.
$# értéke a pozíciós paraméterek száma."$@" értéke az összes pozíciós paraméter listája, mindegyik külön szóként."$*" értéke egyetlen string, amelyben az összes pozíciós paramétert egy karakter fűzi össze.
$IFS változó első karaktere, ami alapértelmezés szerint egy szóköz.A "$@" a legbiztonságosabb módja annak, hogy a pozíciós paramétereket átadd egy másik parancsnak, miközben biztonságosan idézőjelben maradnak.
Ezt használod arra is, hogy végigmenj a pozíciós paramétereken:
for arg in "$@"; do
do_something_with "$arg"
done
A gyakorlatban a "$@"-t gyakrabban használjuk, mint a "$*"-ot.
A bash-szkriptekben gyakran előforduló művelet, hogy elkapod egy parancs kimenetét, és eltárolod egy változóban. Ehhez a parancshelyettesítést használod.
var=$(command)
Ha például egy stringet csupa nagybetűssé szeretnél alakítani, ezt teheted:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
A bashben számos beépített lehetőség van a változók és stringek kezelésére, így nem kell külső parancsokat hívnod.
Szöveg csupa nagybetűssé alakítása.
Az előző részben megmutattam, hogyan lehet a tr paranccsal nagybetűssé alakítani egy szöveget.
Ha ezt bashben szeretnéd megtenni:
echo "${text^^}"
Hasonlóképpen a ${text,,} kisbetűssé alakítja az értéket.
Alapértelmezett érték megadása, ha a változó üres.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Keresés és csere.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Sok más érdekes paraméterkiterjesztés is létezik: részstring kinyerése, a string hosszának lekérdezése, alapérték hozzárendelése, szöveg eltávolítása az érték elejéről vagy végéről, és még sok más. Olvass róluk a kézikönyvben.