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
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
De ingebouwde shell weet niet wat het --version
opdrachtregelargument is, het herhaalt het gewoon in het terminalvenster:
echo --version
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.
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.
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."
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.""
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"
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
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)"
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"
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"
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"
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"
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"
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 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
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
cat logfile.txt
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.