Hvordan gemmer man kommandooutput som variabel i Bash? PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Hvordan gemmer man kommandooutput som variabel i Bash?

Introduktion

I bash-scripts kan det være praktisk at tildele output fra en kommando til variabler ved at gemme udgangene af kommandoerne og bruge dem senere.

I denne korte guide vil vi tage et kig på, hvordan du kan gemme output fra en kommando som en variabel i Bash.

Grundlæggende om opsætning af variabler

Gemme output af en kommando som en variabel opnås gennem kommando substitution. Kommandosubstitution er en indpakning, der udfører kommandoen i en subshell miljø, og erstatter den indpakkede kommando med standardoutputtet fra det miljø, hvor kommandoen blev kørt. Denne udgang kan så refereres til senere, hvis den er tilsluttet en referencevariabel!

Kommandoerstatning kan opnås gennem backticks eller dollartegnet med parentes:

`command`

$(command)

Der er debat om hvorvidt 'kommando' (backticks) eller $(kommando) (dollartegn og parentes) skal bruges som "best practice". $(command) fungerer godt i indlejring og forbedrer læsbarheden i nogle tilfælde, men du kan bruge begge syntaks i de efterfølgende eksempler.

Når det er sagt - at tildele output fra en kommando til en variabel i Bash er så let som:

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

Løb ${variable} er kendt som parameterudvidelse, og bruges til at evaluere og hente den værdi, der er knyttet til en referencevariabel.

Lad os nu tage et kig på det enkle eksempel på opsætning af en variabel for en kommando til at ændre outputfarven:

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

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

echo "${GREEN}Paris"

I uddraget har vi brugt tput kommandoen og tildelte den returnerede værdi af disse kommandoer til at udskrive farverig tekst. Det setaf ændrer forgrundsfarven, og 3 (grøn) og 9 (orange) er farvekoder.

Nu går vi videre til et andet eksempel, der indeholder flere betingelser for at opsætte variabler for forskellige kommandoer:

#!/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 ovenstående script er whoami kommando returnerer den aktuelle brugers brugernavn. Det uname -a returnerer systemoplysningerne, og date returnerer det aktuelle klokkeslæt og dato.

Bemærk: Vi kan sammenkæde variabeltildeling ved at tilføje flere kommandoer i et enkelt indlejret kald. Det CREATE variabel indeholder outputtet af touch kommando, som igen opretter en fil og sætter filnavnet til outputtet af date +"%d%m%Y kommando.

Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!

Til sidst tilføjer vi en multiline kommandovariabel tildelingskoncept ved at tilføje en omvendt skråstreg () mellem ls kommando -l flag for kun at vise tekstfiler vha *.txt. Omvendt skråstreg er en escape-karakter, der informerer skallen om ikke at fortolke den næste karakter.

I echo kommando, tilføjede vi -e flag for at bruge specialtegn, dvs. n (ny linje), for at udskrive output i den nye linje.

Vi får følgende resultat efter at have udført scriptet:

$ ./variable.sh

Konklusion

I denne korte guide har vi taget et kig på, hvordan du kan indstille outputtet af en kommando til en variabel i Bash. Vi har taget et kig på forskellen mellem syntakserne for kommando substitution, og bemærker læsbarhedsforbedringerne af $(command) over backtick-baseret substitution. Derefter har vi taget et kig på flere eksempler på både simpel tildeling og kædet/indlejret outputtildeling.

Tidsstempel:

Mere fra Stablemisbrug