Paraméter helyettesítések
https://tldp.org/LDP/abs/html/parameter-substitution.html
Egy kivonata a lehetséges helyettesítéséknek:

Példák:
A paraméter helyettesítés formája a következő:
${változó szabály helyettesítő-szó}
Létrehozunk egy változót:
foo=asdf
Azután csinálunk rá egy helyettesítést
echo ${foo}
Ennek az az eredménye, hogy `asdf`
Ha helyettesítő szabályt és helyettesítő szót is használunk akkor az
echo ${foo-bar}
szintén azt adja vissza, hogy `asdf`, mert a - szabály értelmében ha van értéke a változónak, akkor azt kapjuk vissza
Ha létezik a változónk, de nincs értéke
foo=
echo ${foo-bar}
Akkor null értéket kapunk vissza. Ezt könnyebb úgy szemléltetni, hogy ha hozzáírok az echo parancs végéhez még valamit
echo ${foo-bar}valami
és ekkor csak azt kapom vissza, hogy valami, azaz
Ugyanez a null érték helyettesítés más szabállyal más eredményt ad. Ha a szabály :- akkor a helyettesítő szót kapjuk vissza:
echo ${foo:-bar}
Megkapjuk kimenetnek, hogy bar, de ez egyúttal a foo értéke lett. Azaz most már van a foo-nak értéke, mégpedig az, hogy bar
echo $foo
bar
Próbáljátok ki a fenti táblázat többi szabályát is a fenti példák alapján!
Mit csináunk akkor itt?
echo ${x:=$(ls)}
Az `ls` parancs kimetét rendeljük hozzá az x változóhoz, ha annak nincs értéke, vagy nem is létezik
A bash tud nem létező változó tesztelést egyszerűbben is tesztelni:
if [[ -v ARGUMENT ]]; then ...
A feltétel akkor teljesül, ha az ARGUMENT létezikVáltozó érték hosszának megszámolása
Néha szükségünk van rá, hogy megszáoljuk, hogy hány karakter hosszú érték van egy változóban
Egy példa
echo $HOME
A HOME egy a bash által definiált környezeti változó, ami mindig a rendelkezésünkre áll, azt tartalmazza, hogy hol a home könyvtárunk.
echo ${#HOME}Az így visszaadott szám pedig a karakterek száma a HOME változóban.
Mintázat megvágása a változó végén
${változó%mintázat}
vagy
${változó%%mintázat}
ls *sh
tanulas.sh
x=$(ls *sh)
echo ${x%.sh}
tanulas
Azaz levágtuk a .sh kitejesztést
Ha kicsit másképp adjuk meg a mintázatot akkor érthetővé válik a % és %% közötti különbség:
echo ${x%s*}
Ez csak a "sh"-t vágja le, míg a
echo ${x%%s*}
tanula
többet vág. Miért? Azért mert a %% használata a leghosszabb vágást jelenti míg a % a legrövidebbet. Azaz ha a mintázat többször is teljesül a stringben, akkor az első vagy utolsó találatot. Figyelem, Ez nem igazűn reguláris kifejezés! Tudjuk hazsnálni a * és ? karaktereket. A * bármennyi bármit jelent, a ? egy darab bármit.
Helyettesítés változóban
${VÁLTOZÓ // mintázat / mire cseréljük /}
MYVAR=h3o02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[a-zA-Z]/.}
echo $MYVAR
Látható, hogy itt már tudunk karakter osztályt definiálni, azaz minden betűt tudtunk cserélni.
Ha nem írjuk vissza az eredményt a MYVAR változóba, akkor is működik a dolog
echo ${MYVAR//[0-9]/?}
Kicseréltük a számokat kérdőkjelekre.
MYVAR=h3o02123ware38384you443d34o3434ingtod38384day
Betűk megadása egyszerűbben
echo ${MYVAR//[[:alpha:]]/X}
Számok megadása egyszerűbben
echo ${MYVAR//[[:digit:]]/N}
hello=h3o02123ware38384you443d34o3434ingto38384day
`d` betűk eltávolítása a karakterláncból. A helyettesítő értékünk null, azaz nincs semmi az utolsó / után
echo
${hello//d/}
Számok eltávolítása
echo ${hello//[0-9]/}
Rész karakterláncok kiírása
a=${hello//[0-9]/}
echo ${a:0:3} ${a:3:3} ${a:6:3} ${a:9:5} ${a:14:5}
Számok kiszdése perl regexp helyettesítés használatával:
echo $hello | perl -pe 's/\d//g'
MYVAR=ho02123ware38384you443d34o3434ingtod38384day;
echo $MYVAR | grep -o -E '[0-9]'
Remove Largest Suffix Pattern
Remove Largest Prefix Pattern
x=posix/src/std
echo ${x%%/*}
posix
echo ${x##*/}
std