Bevezetés
A bash szkriptekben egy parancs kimenetének változókhoz való hozzárendelése kényelmes lehet a parancsok kimeneteinek tárolásával és későbbi felhasználásával.
Ebben a rövid útmutatóban megvizsgáljuk, hogyan tárolhatja a parancs kimenetét változóként a Bashban.
A változók beállításának alapjai
A parancs kimenetének változóként való mentése a következőn keresztül érhető el parancshelyettesítés. A parancshelyettesítés egy burkoló, amely végrehajtja a parancsot a subshell környezet, és lecseréli a becsomagolt parancsot annak a környezetnek a szabványos kimenetére, amelyben a parancs fut. Erre a kimenetre később hivatkozni lehet, ha referenciaváltozóhoz csatlakozik!
A parancsok helyettesítése backtickekkel vagy zárójeles dollárjellel lehetséges:
`command`
$(command)
Vita folyik arról, hogy vajon `parancs` (backticks) ill $(parancs) (dollárjel és zárójel) „legjobb gyakorlatként” kell használni. $(command)
jól működik a beágyazásban, és bizonyos esetekben javítja az olvashatóságot, de a következő példákban bármelyik szintaxist használhatja.
Ennek ellenére a parancs kimenetének hozzárendelése egy változóhoz a Bashban olyan egyszerű, mint:
VARIABLE=$(command)
echo "${VARIABLE}"
futás ${variable}
úgy is ismert mint paraméterbővítés, és a referenciaváltozóhoz társított érték kiértékelésére és lekérésére szolgál.
Vessünk most egy pillantást egy változó beállítására egy parancshoz, amely megváltoztatja a kimeneti színt:
#!/bin/bash
GREEN=$(tput setaf 2)
echo "${GREEN}Please"
ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit"
echo "${GREEN}Paris"
A részletben a tput
parancsot, és ezeknek a parancsoknak a visszaadott értékét rendelte hozzá a színes szöveg nyomtatásához. A setaf
megváltoztatja az előtér színét, a 3 (zöld) és 9 (narancs) pedig színkód.
Most áttérünk egy másik példára, amely több feltételt tartalmaz a különböző parancsok változóinak beállításához:
#!/bin/bash
PERSON=$(whoami)
echo -e "Hey ${PERSON}! I am Charlien"
DETAILS=$(uname -a)
echo -e "You're running this script on:n${DETAILS}n"
DATES=$(date)
echo -e "The script is being run on:n${DATES}n"
CREATE=$(touch $(date +"%d%m%Y").txt)
echo -e "A text file logging this run is created.${CREATE}n"
LOCATION=$(ls
-l *txt)
echo -e "Saved text file at: ${LOCATION}"
A fenti szkriptben a whoami
parancs az aktuális felhasználó felhasználónevét adja vissza. A uname -a
visszaadja a rendszerinformációkat, és a date
visszaadja az aktuális időt és dátumot.
Jegyzet: A változók hozzárendelését láncolhatjuk úgy, hogy több parancsot adunk hozzá egyetlen beágyazott híváshoz. A CREATE
változó tartalmazza a kimenetét touch
parancsot, amely viszont létrehoz egy fájlt, és beállítja a fájl nevét a kimenetre date +"%d%m%Y
parancs.
Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!
Végül hozzáadjuk a multiline
parancs változó hozzárendelési koncepcióját fordított perjel hozzáadásával ()
között ls
parancs -l
jelölje be, hogy csak a szöveges fájlokat jelenítse meg *.txt
. A fordított perjel egy escape karakter, amely tájékoztatja a shellt, hogy ne értelmezze a következő karaktert.
A echo
parancsot, hozzáadtuk a -e
zászlót a speciális karakter használatához, pl. n
(újsor), a kimenet új sorban történő nyomtatásához.
A szkript végrehajtása után a következő eredményt kapjuk:
$ ./variable.sh
Következtetés
Ebben a rövid útmutatóban megvizsgáltuk, hogyan állíthatja be a parancs kimenetét egy változóra a Bashban. Megnéztük a szintaxisok közötti különbséget parancshelyettesítés, figyelembe véve az olvashatóság javulását $(command)
backtick alapú helyettesítés felett. Ezután megnéztünk néhány példát az egyszerű hozzárendelésre és a láncolt/beágyazott kimenet-hozzárendelésre egyaránt.