Hoe de echo-opdracht op Linux te gebruiken

Een Linux-terminalvenster op een desktop met Ubuntu-thema.
Fatmawati Achmad Zaenuri / Shutterstock

De echo commando is perfect voor het schrijven van opgemaakte tekst naar het terminalvenster. En het hoeft geen statische tekst te zijn. Het kan shell-variabelen, bestandsnamen en mappen bevatten. U kunt de echo ook omleiden om tekstbestanden en logbestanden te maken. Volg deze eenvoudige gids om erachter te komen hoe.

Echo herhaalt wat u zegt te herhalen

Zeus verliet de berg Olympus graag om met prachtige nimfen om te gaan. Op een reis vertelde hij een bergnimf genaamd Echo om zijn vrouw Hera te belazeren als ze hem volgde. Hera kwam Zeus zoeken en Echo deed er alles aan om Hera in gesprek te houden. Uiteindelijk verloor Hera haar geduld en vervloekte ze de arme Echo, zodat ze alleen de laatste woorden herhaalde die iemand anders had gezegd. Wat Hera Zeus heeft aangedaan toen ze hem inhaalde, is een raadsel.

En dat is vrijwel zo echo’s veel in het leven. Het herhaalt wat is gezegd te herhalen. Dat is een simpele functie, maar wel een essentiële. Zonder echo , zouden we bijvoorbeeld geen zichtbare uitvoer van shell-scripts kunnen krijgen.

Hoewel niet beladen met een veelvoud aan toeters en bellen, is de kans groot dat echo heeft een aantal mogelijkheden die u niet kende of die u was vergeten.

echo? echo!

De meeste Linux-systemen bieden twee versies van echo. De Bash-schaal heeft zijn eigen echo erin ingebouwd, en er is een binaire uitvoerbare versie van echo ook.

We kunnen de twee verschillende versies zien door de volgende opdrachten te gebruiken:

type echo
whereis echo

typ echo in een terminalvenster

De type commando vertelt ons of het commando dat we eraan geven als zijn argument een ingebouwde shell, een binair uitvoerbaar bestand, een alias of een functie is. Dat meldt het ons echo is een shell ingebouwd.

Zodra het een antwoord heeft gevonden, type stopt met zoeken naar verdere overeenkomsten. Het vertelt ons dus niet of er andere commando’s met dezelfde naam in het systeem aanwezig zijn. Maar het vertelt ons welke het het eerst vindt. En dat is degene die standaard wordt gebruikt wanneer we die opdracht geven.

De whereis commando zoekt naar het binaire uitvoerbare bestand, de broncode en de man-pagina voor het commando dat we eraan doorgeven als de opdrachtregelparameter. Het zoekt niet naar ingebouwde shell omdat ze geen apart binair uitvoerbaar bestand hebben. Ze zijn een integraal onderdeel van het uitvoerbare bestand van Bash.

De whereis commando meldt dat echo is een binair uitvoerbaar bestand in het /bin directory.

Om die versie van echo je zou het expliciet moeten aanroepen door het pad naar het uitvoerbare bestand op de opdrachtregel op te geven:

/bin/echo --version

/ bin / echo --version in een terminalvenster

De ingebouwde shell weet niet wat het --version opdrachtregelargument is, het herhaalt het gewoon in het terminalvenster:

echo --version

echo --version in een terminalvenster

De voorbeelden die hier worden getoond, gebruiken allemaal de standaardversie van echo, in de Bash-schaal.

Tekst schrijven naar de terminal

Om een ​​simpele reeks tekst naar het terminalvenster te schrijven, typ je echo en de tekenreeks die u wilt weergeven:

echo My name is Dave.

echo Mijn naam is Dave.  in een terminalvenster

De tekst wordt voor ons herhaald. Maar terwijl je experimenteert, zul je snel ontdekken dat dingen iets gecompliceerder kunnen worden. Kijk naar dit voorbeeld:

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

echo Mijn naam is Dave en ik ben een nerd.  in een terminalvenster

Het terminalvenster geeft een > teken en zit daar te wachten. Ctrl + C brengt u terug naar de opdrachtprompt. Wat is daar gebeurd?

Het enkele aanhalingsteken of apostrof in het woord “Ik ben” verward echo. Het interpreteerde dat enkele citaat als het begin van een geciteerde tekstgedeelte. Omdat er geen enkele aanhalingsteken werd gedetecteerd echo wachtte op meer input. Het verwachtte dat verdere input het ontbrekende enkele citaat zou bevatten waarop het wachtte.

Om een ​​enkel aanhalingsteken in een string op te nemen, is de eenvoudigste oplossing om de hele string tussen dubbele aanhalingstekens te plaatsen:

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

echo

Uw tekst tussen dubbele aanhalingstekens plaatsen is een goed algemeen advies. In scripts vormt het een duidelijke scheiding tussen de parameters die u doorgeeft echo. Dit maakt het lezen en debuggen van scripts veel gemakkelijker.

Wat als u een dubbel aanhalingsteken in uw tekstreeks wilt opnemen? Dat is gemakkelijk, zet gewoon een backslash voor het dubbele aanhalingsteken (zonder spatie ertussen).

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

echo

Dit verpakt het woord “nerd” voor ons tussen dubbele aanhalingstekens. We zullen er meer van zien backslash-ontsnapt karakters binnenkort.

Variabelen gebruiken met echo

Tot nu toe hebben we vooraf gedefinieerde tekst naar het terminalvenster geschreven. We kunnen variabelen gebruiken met echo om uitvoer te produceren die dynamischer is en waar waarden door de shell voor ons in zijn ingevoegd. We kunnen een eenvoudige variabele definiëren met dit commando:

my_name="Dave"

Een variabele genaamd my_name Is gemaakt. Het heeft de waarde van de tekst ‘Dave’ gekregen. We kunnen de variabelenaam gebruiken in de strings die we doorgeven echo , en de waarde van de variabele zal naar het terminalvenster worden geschreven. U moet een dollarteken plaatsen $ voor de variabelenaam te laten echo weet dat het een variabele is.

Er is een voorbehoud. Als je je string tussen enkele aanhalingstekens hebt gewikkeld echo zal alles letterlijk behandelen. Om de variabele te hebben waarde weergegeven, en niet de naam van de variabele, gebruik dubbele aanhalingstekens.

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

echo 'Mijn naam is $ mijn_naam' in een terminalvenster

Enigszins toepasselijk, dat is voor herhaling vatbaar:

  • Gebruik makend van single aanhalingstekens resulteren in het schrijven van de tekst naar het terminalvenster in een letterlijk mode.
  • Gebruik makend van dubbele aanhalingstekens resulteren in de variabele die wordt geïnterpreteerd – ook wel variabele expansie genoemd – en de waarde wordt naar het terminalvenster geschreven.

VERWANT: Werken met variabelen in Bash

Commando’s met echo gebruiken

We kunnen een commando gebruiken met echo en neem zijn uitvoer op in de string die naar het terminalvenster wordt geschreven. We moeten het dollarteken gebruiken $ alsof het commando een variabele is, en plaats het hele commando tussen haakjes.

We gaan het datacommando gebruiken. Een tip is om de opdracht alleen te gebruiken voordat u hem gaat gebruiken echo. Op die manier, als er iets mis is met de syntaxis van uw opdracht, identificeert u deze en corrigeert u deze voordat u deze opneemt in de echo opdracht. Als het echo commando niet doet wat u verwacht, u weet dat het probleem bij de echo syntaxis omdat je de syntaxis van de opdracht al hebt bewezen.

Dus probeer dit in het terminalvenster:

date +%D

date +% D in een terminalvenster

En als we tevreden zijn dat we krijgen wat we verwachten van het date-commando, integreren we het in een echo opdracht:

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

echo

Merk op dat de opdracht tussen haakjes en het dollarteken staat $ staat direct voor het eerste haakje.

Tekst opmaken met echo

De -e (schakel backslash-escapes in) laat ons enkele backslash-escapetekens gebruiken om de lay-out van de tekst te wijzigen. Dit zijn de backslash-escapetekens die we kunnen gebruiken:

  • een: Alert (historisch bekend als BEL). Dit genereert het standaard waarschuwingsgeluid.
  • b: Schrijft een backspace-teken.
  • c: Verlaat alle verdere uitvoer.
  • e: Schrijft een ontsnappingskarakter.
  • f: Schrijft een form feed-teken.
  • n: Schrijft een nieuwe regel.
  • r: Schrijft een regelterugloop.
  • t: Schrijft een horizontaal tabblad.
  • v: Schrijft een verticaal tabblad.
  • \: Schrijft een backslash-teken.

Laten we er een paar gebruiken en kijken wat ze doen.

echo -e "This is a long line of textnsplit across three linesnwithttabstontthetthirdtline"

echo -e "Dit is een lange tekstregel  nsplitsing over drie regels  nmet  ttabs  ton  tde  tthird  tline" in een terminalvenster

De tekst is opgesplitst in een nieuwe regel waar we de n tekens en er wordt een tabblad ingevoegd waar we de t karakters.

echo -e "Herevarevverticalvtabs"

echo -e "Hier  vare  vvertical  vtabs" in een terminalvenster

Zoals de n nieuwe lijntekens, een verticaal tabblad v verplaatst de tekst naar de regel eronder. Maar in tegenstelling tot de n nieuwe lijntekens, de v verticale tab begint de nieuwe regel niet bij kolom nul. Het gebruikt de huidige kolom.

De b backspace-tekens verplaatsen de cursor één teken terug. Als er meer tekst naar de terminal moet worden geschreven, zal die tekst het vorige teken overschrijven.

echo -e "123b4"

echo -e "123  b4" in een terminalvenster

De “3” wordt overschreven door de “4”.

De r regelterugloop teken oorzaken echo om terug te keren naar het begin van de huidige regel en om verdere tekst uit kolom nul te schrijven.

echo -e "123r456"

echo -e "123  r456" in een terminalvenster

De “123” tekens worden overschreven door de “456” tekens.

De a alert karakter zal een hoorbare “piep” produceren. Het gebruikt het standaard waarschuwingsgeluid voor uw huidige thema.

echo -e "Make a bleepa"

echo -e "Maak een piep  a" in een terminalvenster

De -n (geen nieuwe regel) -optie is geen reeks met backslash-escapes, maar het heeft wel invloed op de vormgeving van de tekstlay-out, dus we zullen het hier bespreken. Het voorkomt echo van het toevoegen van een nieuwe regel aan het einde van de tekst. De opdrachtprompt verschijnt direct na de tekst die naar het terminalvenster is geschreven.

echo -n "no final newline"

echo -n "geen laatste nieuwe regel" in een terminalvenster

Echo gebruiken met bestanden en mappen

Je kunt gebruiken echo als een soort arme man-versie van ls. Er zijn maar weinig opties wanneer u deze gebruikt echo zoals dit. Als u enige vorm van trouw of nauwkeurige controle nodig heeft, kunt u beter gebruik maken van ls en zijn legioen aan opties.

Dit commando geeft een lijst van alle bestanden en mappen in de huidige map:

echo *

Dit commando geeft een lijst van alle bestanden en mappen in de huidige map waarvan de naam begint met “D”:

echo D*

Dit commando geeft een lijst van alle “.desktop” -bestanden in de huidige directory:

echo *.desktop

echo * in een terminalvenster

Ja. Dit is niet spelen echo’s sterke punten. Gebruik ls.

Schrijven naar bestanden met echo

We kunnen de uitvoer omleiden van echo en maak tekstbestanden of schrijf in bestaande tekstbestanden.

Als we de > redirection-operator, wordt het bestand gemaakt als het niet bestaat. Als het bestand bestaat, wordt de uitvoer van echo wordt aan het begin van het bestand toegevoegd, waarbij alle eerdere inhoud wordt overschreven.

Als we de >> redirection-operator, wordt het bestand gemaakt als het niet bestaat. De output van echo wordt aan het einde van het bestand toegevoegd en overschrijft geen bestaande inhoud van het bestand.

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

echo "Een nieuw bestand maken."  > sample.txt in een terminalvenster’ width=”646″ height=”167″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Met het eerste commando wordt een nieuw bestand gemaakt en er wordt tekst in ingevoegd.  Het tweede commando voegt een regel tekst toe aan de onderkant van het bestand.  De <code>cat</code> commando toont de inhoud van het bestand in het terminalvenster.</p>
<p>En natuurlijk kunnen we variabelen opnemen om wat nuttige informatie aan ons bestand toe te voegen.  Als het bestand een logfile is, willen we er misschien een tijdstempel aan toevoegen.  We kunnen dat doen met het volgende commando.</p>
<p>Let op de enkele aanhalingstekens rond de parameters voor de <code>date</code> opdracht.  Ze voorkomen dat de ruimte tussen de parameters wordt geïnterpreteerd als het einde van de parameterlijst.  Ze zorgen ervoor dat de parameters worden doorgegeven aan <code>date</code> correct.</p>
<pre>echo "Logfile started: $(date +

cat logfile.txt

echo logfile.txt in een terminalvenster” width=”646″ height=”132″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Onze logfile is gemaakt voor ons en cat laat ons zien dat het datumstempel en het tijdstempel er beide aan zijn toegevoegd.

VERWANT: Wat zijn stdin, stdout en stderr op Linux?

Dat is het repertoire van echo

Een eenvoudig commando, maar onmisbaar. Als het niet bestond, zouden we het moeten uitvinden.

De streken van Zeus hebben tenslotte iets goeds gedaan.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in