Hur man använder Echo-kommandot på Linux

Fatmawati Achmad Zaenuri/

echo kommandot är perfekt för att skriva formaterad text till terminalfönstret. Och det behöver inte vara statisk text. Det kan innehålla skalvariabler, filnamn och kataloger. Du kan också omdirigera echo för att skapa textfiler och loggfiler. Följ den här enkla guiden för att ta reda på hur.

Echo upprepar vad du säger att upprepa

Zeus var förtjust i att lämna Mount Olympus för att umgås med vackra nymfer. På en resa berättade han för en bergsnymf som heter Echo att waylay sin fru, Hera, om hon följde honom. Hera kom och letade efter Zeus, och Echo gjorde allt hon kunde för att hålla Hera i konversation. Slutligen förlorade Hera sitt humör och förbannade dåligt eko så att hon bara upprepar de sista orden som någon annan hade sagt. Vad Hera gjorde med Zeus när hon kom ikapp honom är någons gissning.

och det är ganska mycket echo s mycket i livet. Det upprepar vad det har blivit tillsagt att upprepa. Det är en enkel funktion, men en viktig funktion. Utan echo , skulle vi inte kunna få synlig utmatning från skalskript, till exempel.

även om det inte är laddat med en mängd klockor och visselpipor, finns det en god chans att echo har några funktioner som du inte visste om eller som du hade glömt.

eko? echo!

de flesta Linux-system tillhandahåller två versioner av echo. Bash-skalet har sitt eget echoinbyggt i det, och det finns också en binär körbar version avecho.

Vi kan se de två olika versionerna genom att använda följande kommandon:

type echo
whereis echo

type kommando berättar om kommandot vi skickar till det som argument är ett skal inbyggt, en binär körbar, ett alias eller en funktion. Det rapporterar till oss att echo är ett skal inbyggt.

så snart det har hittat ett svar, type slutar leta efter ytterligare matchningar. Så det berättar inte om det finns andra kommandon med samma namn som finns i systemet. Men det säger oss vilken den hittar först. Och det är den som kommer att användas som standard när vi utfärdar det kommandot.

kommandotwhereis letar efter den binära körbara, källkoden och man-sidan för kommandot vi skickar till det som kommandoradsparameter. Det Letar inte efter skalbyggare eftersom de inte har en separat binär körbar. De är en integrerad del av bash körbara.

kommandotwhereis rapporterar attecho är en binär körbar fil i katalogen/bin.

för att använda den versionen av echo måste du uttryckligen kalla det genom att ange sökvägen till den körbara på kommandoraden:

/bin/echo --version

det inbyggda skalet vet inte vad --version kommandoradsargument är, det upprepar det bara i terminalfönstret:

echo --version

exemplen som visas här använder alla standardversionen avecho, I Bash-skalet.

skriva Text till terminalen

för att skriva en enkel textsträng till terminalfönstret, skrivecho och strängen du vill att den ska visa:

echo My name is Dave.

texten upprepas för oss. Men när du experimenterar kommer du snart att upptäcka att saker kan bli lite mer komplicerade. Titta på det här exemplet:

echo My name is Dave and I'm a geek.

terminalfönstret visar ett > tecken och sitter där och väntar. Ctrl + C kommer tillbaka till kommandotolken. Vad hände där?

det enda citatet eller apostrofen i ordet ”Jag är” förvirrad echo. Det tolkade det enda citatet som början på ett citerat textavsnitt. Eftersom det inte upptäckte ett avslutande enda citat väntade echo på mer inmatning. Det förväntade sig att ytterligare input för att inkludera den saknade enda citat det väntade på.

för att inkludera ett enda citat i en sträng är den enklaste lösningen att linda hela strängen inom dubbla citattecken:

echo "My name is Dave and I'm a geek."

att lägga in din text i dubbla citattecken är bra allmänna råd. I skript avgränsar det rent parametrarna du skickar till echo. Detta gör läsning—och felsökning—skript mycket enklare.

vad händer om du vill inkludera ett dubbelt citattecken i din textsträng? Det är enkelt, lägg bara ett backslash \ framför det dubbla citatmärket (utan mellanslag mellan dem).

echo "My name is Dave and I'm a \"geek.\""

detta sveper ordet” geek ” i dubbla citattecken för oss. Vi får se mer av dessa backslash-escaped tecken inom kort.

använda variabler med echo

hittills har vi skrivit fördefinierad text till terminalfönstret. Vi kan använda variabler med echo för att producera utdata som är mer dynamiska och har värden infogade i det för oss av skalet. Vi kan definiera en enkel variabel med detta kommando:

my_name="Dave"

en variabel som heter my_name har skapats. Det har tilldelats värdet av texten ” Dave.”Vi kan använda variabelnamnet i strängarna som vi skickar till echo , och värdet på variabeln kommer att skrivas till terminalfönstret. Du måste sätta ett dollartecken $ framför variabelnamnet för att låta echo veta att det är en variabel.

det finns en varning. Om du har lindat din sträng i enstaka citatteckenecho kommer att behandla allt bokstavligt. Om du vill att variabelvärdet ska visas, och inte namnet på variabeln, använder du dubbla citattecken.

echo 'My name is $my_name'
echo "My name is $my_name"

något träffande, det är värt att upprepa:

  • med hjälp av enstaka citattecken resulterar i att texten skrivs till terminalfönstret på ett bokstavligt sätt.
  • användning av dubbla citattecken resulterar i att variabeln tolkas—även kallad variabel expansion—och värdet skrivs till terminalfönstret.

RELATERAD: Hur man arbetar med variabler i Bash

använda kommandon med echo

Vi kan använda ett kommando med echo och införliva dess utgång i strängen som skrivs till terminalfönstret. Vi måste använda dollartecknet $ som om kommandot var en variabel och linda hela kommandot inom parentes.

Vi kommer att använda datumkommandot. Ett tips är att använda kommandot på egen hand innan du börjar använda det med echo. På så sätt, om det är något fel med syntaxen för ditt kommando, identifierar du det och korrigerar det innan du inkluderar det i kommandot echo. Om kommandotecho inte gör vad du förväntar dig, vet du att problemet måste vara medecho syntax eftersom du redan har bevisat kommandots syntax.

så, prova detta i terminalfönstret:

date +%D

och nöjd med att vi får vad vi förväntar oss av datumkommandot, integrerar vi det i ett echo kommando:

echo "Today's date is: $(date +%D)"

Obs Kommandot finns inom parenteserna och dollartecknet $ är omedelbart före den första parentesen.

formatera Text med echo

-e (aktivera backslash escapes) alternativet låter oss använda några backslash-flydde tecken för att ändra textens layout. Det här är de backslash-flyktiga tecknen vi kan använda:

Låt oss använda några av dem och se vad de gör.

echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"

texten är uppdelad i en ny rad där vi har använt \n tecken och en flik infogas där vi har använt \t tecken.

echo -e "Here\vare\vvertical\vtabs"

liksom \n nya radtecken flyttar en vertikal flik \v texten till raden nedan. Men till skillnad från \n nya radtecken, startar den vertikala fliken \v inte den nya raden vid kolumn noll. Den använder den aktuella kolumnen.

\b backspace-tecken flyttar markören tillbaka ett tecken. Om det finns mer text som ska skrivas till terminalen kommer den texten att skriva över föregående tecken.

echo -e "123\b4"

” 3 ”skrivs över av”4”.

\r vagnreturtecken gör attecho återgår till början av den aktuella raden och skriver ytterligare text från kolumn noll.

echo -e "123\r456"

”123” – tecknen skrivs över av ” 456 ” – tecknen.

\a varningstecken kommer att producera en hörbar ”pip.”Den använder standardvarningsljudet för ditt nuvarande tema.

echo -e "Make a bleep\a"

alternativet-n (ingen nyrad) är inte en backslash-escaped-sekvens, men det påverkar kosmetiken i textlayouten, så vi diskuterar det här. Det förhindrar echo från att lägga till en ny rad i slutet av texten. Kommandotolken visas direkt efter texten som skrivs till terminalfönstret.

echo -n "no final newline"

använda echo med filer och kataloger

Du kan använda echo som en slags fattig mans version av ls. Dina alternativ är få och långt ifrån när du använder echo så här. Om du behöver någon form av trohet eller fin kontroll, är du bättre att använda ls och dess legion av alternativ.

detta kommando listar alla filer och kataloger i den aktuella katalogen:

echo *

detta kommando listar alla filer och kataloger i den aktuella katalogen vars namn börjar med” D”:

echo D*

detta kommando listar alla”.desktop ” – filer i den aktuella katalogen:

echo *.desktop

Ja. Detta spelar inte tillechos styrkor. Använd ls.

skriva till filer med echo

Vi kan omdirigera utmatningen från echo och antingen skapa textfiler eller skriva in befintliga textfiler.

om vi använder> omdirigeringsoperatören skapas filen om den inte existerar. Om filen existerar läggs utmatningen från echo till i början av filen och skriver över tidigare innehåll.

om vi använder>> omdirigeringsoperatören skapas filen om den inte existerar. Utdata från echo läggs till i slutet av filen och skriver inte över något befintligt innehåll i filen.

echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt

en ny fil skapas av det första kommandot och text sätts in i den. Det andra kommandot lägger till en textrad längst ner i filen. Kommandotcat visar innehållet i filen till terminalfönstret.

och naturligtvis kan vi inkludera variabler för att lägga till användbar information i vår fil. Om filen är en loggfil kanske vi vill ha en tidsstämpel tillagd till den. Vi kan göra det med nästa kommando.

notera de enskilda citattecken runt parametrarna för kommandotdate. De förhindrar att utrymmet mellan parametrarna tolkas som Slutet på parameterlistan. De säkerställer att parametrarna skickas till date korrekt.

echo "Logfile started: $(date +'%D %T')" > logfile.txt
cat logfile.txt

vår loggfil är skapad för oss och cat visar oss att datumstämpeln och tidsstämpeln båda lades till det.

relaterat: Vad är stdin, stdout och stderr på Linux?

det är echo: s repertoar

ett enkelt kommando, men oumbärligt. Om det inte fanns, skulle vi behöva uppfinna det.

Zeus ’ s shenanigans gjorde trots allt bra.



Lämna ett svar

Din e-postadress kommer inte publiceras.