Introductie
In bash-scripts kan het handig zijn om de uitvoer van een commando aan variabelen toe te wijzen door de uitvoer van de commando's op te slaan en deze later te gebruiken.
In deze korte handleiding bekijken we hoe u de uitvoer van een commando als een variabele in Bash kunt opslaan.
De basisprincipes voor het instellen van variabelen
Het opslaan van de uitvoer van een commando als een variabele wordt bereikt door commando vervanging. Commandovervanging is een wrapper die de opdracht uitvoert in a subshell-omgeving, en vervangt de ingepakte opdracht door de standaarduitvoer van de omgeving waarin de opdracht werd uitgevoerd. Er kan later naar deze uitgang worden verwezen, indien aangesloten op een referentievariabele!
Commandovervanging kan worden bereikt via backticks of het dollarteken tussen haakjes:
`command`
$(command)
Er is discussie over de vraag of `commando` (terugtekens) of $(opdracht) (dollarteken en haakjes) moet als โbeste praktijkโ worden gebruikt. $(command)
werkt goed bij het nesten en verbetert in sommige gevallen de leesbaarheid, maar in de volgende voorbeelden kunt u beide syntaxis gebruiken.
Dat gezegd hebbende: het toewijzen van de uitvoer van een commando aan een variabele in Bash is net zo eenvoudig als:
VARIABLE=$(command)
echo "${VARIABLE}"
Hardlopen ${variable}
heet parameteruitbreiding, en wordt gebruikt om de waarde die aan een referentievariabele is gekoppeld, te evalueren en op te halen.
Laten we nu eens kijken naar het eenvoudige voorbeeld van het instellen van een variabele voor een opdracht om de uitvoerkleur te wijzigen:
#!/bin/bash
GREEN=$(tput setaf 2)
echo "${GREEN}Please"
ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit"
echo "${GREEN}Paris"
In het fragment hebben we de tput
opdracht en heeft de geretourneerde waarde van die opdrachten toegewezen om kleurrijke tekst af te drukken. De setaf
verandert de voorgrondkleur, en 3 (groen) en 9 (oranje) zijn kleurcodes.
Nu gaan we verder met een ander voorbeeld dat meerdere voorwaarden bevat om variabelen in te stellen voor verschillende opdrachten:
#!/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}"
In het bovenstaande script is de whoami
commando retourneert de gebruikersnaam van de huidige gebruiker. De uname -a
retourneert de systeeminformatie, en de date
retourneert de huidige tijd en datum.
Opmerking: We kunnen de toewijzing van variabelen aan elkaar koppelen door meerdere opdrachten toe te voegen in รฉรฉn enkele geneste aanroep. De CREATE
variabele bevat de uitvoer van de touch
commando, dat op zijn beurt een bestand aanmaakt en de bestandsnaam instelt op de uitvoer van het date +"%d%m%Y
opdracht.
Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!
Tenslotte voegen wij A toe multiline
opdrachtvariabele toewijzingsconcept door een backslash toe te voegen ()
tussen de ls
commando -l
flag om alleen tekstbestanden weer te geven met behulp van *.txt
. De backslash is een escape-teken dat de shell informeert om het volgende teken niet te interpreteren.
In het echo
opdracht, hebben we de -e
vlag om het speciale teken te gebruiken, dat wil zeggen: n
(nieuwe regel), om de uitvoer op de nieuwe regel af te drukken.
We krijgen het volgende resultaat na het uitvoeren van het script:
$ ./variable.sh
Conclusie
In deze korte handleiding hebben we bekeken hoe je de uitvoer van een commando in Bash naar een variabele kunt instellen. We hebben gekeken naar het verschil tussen de syntaxis voor commando vervanging, wijzend op de verbeteringen in de leesbaarheid van $(command)
over op backtick gebaseerde vervanging. Vervolgens hebben we verschillende voorbeelden bekeken van zowel eenvoudige toewijzing als gekoppelde/geneste uitvoertoewijzing.