Hur sparar man kommandoutdata som variabel i Bash? PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Hur sparar man kommandoutdata som variabel i Bash?

Beskrivning

I bash-skript kan det vara praktiskt att tilldela utdata från ett kommando till variabler genom att lagra utdata från kommandona och använda dem senare.

I den här korta guiden kommer vi att ta en titt på hur du kan lagra utdata från ett kommando som en variabel i Bash.

Grunderna för att ställa in variabler

Att spara utdata från ett kommando som en variabel uppnås genom kommandosubstitution. Kommandosubstitution är ett omslag som utför kommandot i en subshell miljö, och ersätter det raderade kommandot med standardutdata från miljön där kommandot kördes. Denna utgång kan sedan refereras till senare, om den är kopplad till en referensvariabel!

Kommandosubstitution kan uppnås genom backticks eller dollartecknet med parentes:

`command`

$(command)

Det finns en diskussion om huruvida "kommando". (backticks) eller $(kommando) (dollartecken och parentes) bör användas som "bästa praxis". $(command) fungerar bra i kapsling, och förbättrar läsbarheten i vissa fall, men du kan använda båda syntaxerna i de föregående exemplen.

Med det sagt - att tilldela utdata från ett kommando till en variabel i Bash är så enkelt som:

VARIABLE=$(command)
echo "${VARIABLE}"

Springa ${variable} kallas parameterutvidgning, och används för att utvärdera och hämta värdet som är kopplat till en referensvariabel.

Låt oss nu ta en titt på det enkla exemplet på att ställa in en variabel för ett kommando för att ändra utdatafärgen:

#!/bin/bash
GREEN=$(tput setaf 2)
echo "${GREEN}Please"

ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit"

echo "${GREEN}Paris"

I utdraget har vi använt tput kommandot och tilldelade det returnerade värdet för dessa kommandon för att skriva ut färgstark text. De setaf ändrar förgrundsfärgen och 3 (grön) och 9 (orange) är färgkoder.

Nu ska vi gå vidare till ett annat exempel som innehåller flera villkor för att ställa in variabler för olika kommandon:

#!/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}"

I ovanstående skript, whoami kommandot returnerar den aktuella användarens användarnamn. De uname -a returnerar systeminformationen och date returnerar aktuell tid och datum.

Notera: Vi kan kedja variabeltilldelning genom att lägga till flera kommandon i ett enda kapslat anrop. De CREATE variabeln innehåller utdata från touch kommando, som i sin tur skapar en fil och ställer in filnamnet till utdata från date +"%d%m%Y kommando.

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Slutligen lägger vi till en multiline kommandovariabeltilldelningskoncept genom att lägga till ett omvänt snedstreck () mellan ls kommando -l flagga för att endast visa textfiler med hjälp av *.txt. Omvänt snedstreck är ett flykttecken som informerar skalet att inte tolka nästa tecken.

I echo kommandot lade vi till -e flagga för att använda specialtecknet, dvs. n (ny rad), för att skriva ut utdata på den nya raden.

Vi får följande resultat efter att ha kört skriptet:

$ ./variable.sh

Slutsats

I den här korta guiden har vi tagit en titt på hur du kan ställa in utmatningen av ett kommando till en variabel i Bash. Vi har tagit en titt på skillnaden mellan syntaxerna för kommandosubstitution, noterar läsbarhetsförbättringarna av $(command) över backtick-baserad substitution. Sedan har vi tagit en titt på flera exempel på både enkel tilldelning och kedjad/kapslad utdatatilldelning.

Tidsstämpel:

Mer från Stackabuse