echo — ispis teksta i promenljivih

echo ispisuje tekst na ekran. Deluje kao komanda bez svrhe — dok ne shvatiš da je to alat kojim proveravaš šta je u promenljivoj, gradiš izlaz skripte i puniš fajlove.

Uz to, na njemu se najlakše uči jedna stvar koja zbunjuje sve početnike: kako shell tumači navodnike.

Oblik komande

echo [opcije] [tekst]
  • opcije — menjaju način ispisa (-n, -e)
  • tekst — ono što se ispisuje; može biti običan tekst, promenljiva ili rezultat druge komande

Osnovno

$ echo Zdravo
Zdravo

$ echo "Zdravo, svete"
Zdravo, svete

Bez navodnika radi, ali ne uvek isto:

$ echo Zdravo      svete
Zdravo svete

Razmaci su nestali. Shell je tekst razdvojio na argumente, a echo ih je spojio jednim razmakom. Sa navodnicima ostaje tačno onako kako si napisao:

$ echo "Zdravo      svete"
Zdravo      svete

Zato je navika da tekst uvek staviš u navodnike — ne kozmetika nego zaštita.

Promenljive

Ovde echo postaje koristan. Znak $ ispred imena vraća vrednost:

$ broj=42
$ echo "Vrednost promenljive broj je $broj"
Vrednost promenljive broj je 42

Dodela i ispis moraju biti u dva odvojena reda. U jednom redu ne radi, jer shell zameni $broj pre nego što dodela stupi na snagu:

$ broj=42 echo "Vrednost je $broj"
Vrednost je

Sistemske promenljive postoje same od sebe:

$ echo $HOME
/home/alen

$ echo $USER
alen

$ echo $PWD
/home/alen/vezba

$ echo $SHELL
/bin/bash

Ovako proveravaš i PATH, kad ti sistem tvrdi da komanda ne postoji iako je instalirana:

$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/alen/.local/bin

Dvotačka razdvaja direktorijume u kojima shell traži komande. Ako program nije ni u jednom od njih, moraš mu navesti punu putanju.

I izlazni kod prethodne komande:

$ ls /etc > /dev/null
$ echo $?
0

Nula znači uspeh. Detaljnije u prvom delu bash serije.

Navodnici — jedina stvar koju treba zapamtiti

Tri načina, tri različita ponašanja:

$ ime="Alen"

$ echo "Zdravo, $ime"
Zdravo, Alen

$ echo 'Zdravo, $ime'
Zdravo, $ime

$ echo Zdravo, $ime
Zdravo, Alen
ZapisPonašanje
"dvostruki"promenljive se zamenjuju, razmaci se čuvaju
'jednostruki'sve doslovno, ništa se ne tumači
bez navodnikapromenljive se zamenjuju, razmaci nestaju, džokeri se šire

Praktično: dvostruki po pravilu, jednostruki kad hoćeš da se ništa ne tumači.

Jednostruki su nezamenljivi kad tekst sadrži znakove koji shell-u nešto znače:

$ echo 'Cena je $100'
Cena je $100

$ echo "Cena je $100"
Cena je 00

U drugom slučaju je $1 protumačeno kao promenljiva, koja je prazna, pa je ostalo samo 00. Ista zamka pogađa i lozinke i regularne izraze.

Opcije

-n — bez preloma reda

$ echo -n "Ovo je tekst "
$ echo "bez novog reda između."
Ovo je tekst bez novog reda između.

Koristi se kad skripta nešto pita, pa treba da prompt i unos ostanu u istom redu:

$ echo -n "Unesi ime: "
Unesi ime: $

-e — specijalni znaci

$ echo -e "Prvi red\nDrugi red"
Prvi red
Drugi red

$ echo -e "Ime\tPrezime"
Ime     Prezime
ZnakZnačenje
\nnovi red
\ttabulator
\\obrnuta kosa crta

Bez -e ovi znaci se ispisuju doslovno:

$ echo "Prvi\nDrugi"
Prvi\nDrugi

Rezultat komande

Zapis $( ) izvršava komandu i ubacuje njen izlaz:

$ echo "Danas je $(date +%F)"
Danas je 2026-08-21

$ echo "Prijavljen si na $(hostname) kao $(whoami)"
Prijavljen si na lab01 kao alen

$ echo "Fajlova u direktorijumu: $(ls -1 | wc -l)"
Fajlova u direktorijumu: 14

Ovo je osnova za pravljenje imena fajlova sa datumom, poruka u logu i sličnog.

Upis u fajl

$ echo "prva linija" > fajl.txt      prepisuje
$ echo "druga linija" >> fajl.txt    dodaje na kraj

Jedna strelica briše postojeći sadržaj bez pitanja. Ovo je čest način da se nenamerno isprazni konfiguracija — proveri strelicu pre nego što pritisneš Enter.

Praktična upotreba na sistemu:

# echo "192.168.1.50 baza.local" >> /etc/hosts
# echo "Test server" > /etc/motd

Pažnja kod pisanja u sistemske fajlove sa sudo:

$ sudo echo "tekst" >> /etc/hosts
-bash: /etc/hosts: Permission denied

Zvuči nelogično, ali je tačno: sudo se odnosi na echo, dok preusmeravanje radi shell, koji je i dalje običan korisnik. Rešenje je tee:

$ echo "tekst" | sudo tee -a /etc/hosts

Više o strelicama u lekciji Piping i redirekcija.

echo u skriptama

Ovo je njegova glavna namena:

#!/usr/bin/env bash

echo "=== Provera sistema ==="
echo "Datum: $(date)"
echo "Server: $(hostname)"
echo
echo "Zauzeće diska:"
df -h /

Prazan echo ispisuje prazan red i razdvaja celine.

Poruke o greškama treba slati na standardni izlaz za greške, da se ne pomešaju sa rezultatom:

echo "Greška: fajl ne postoji" >&2

Zašto je to bitno, objašnjeno je u četvrtom delu bash serije.

Kako doći do pomoći

echo je ugrađen u bash, nije zaseban program. Zato uobičajene opcije za pomoć ne rade:

$ echo --help
--help

Ispisao je doslovno ono što si tražio. Za ugrađene komande pomoć se dobija ovako:

$ help echo
$ type echo
echo is a shell builtin

Isto važi za cd, export, alias i druge ugrađene komande. Kad ti --help ili man ne daju ništa, prvo proveri sa type da li je uopšte reč o programu.

Česte greške

Zvezdica se pretvori u spisak fajlova

$ echo *
Documents Downloads beleske.txt

$ echo "*"
*

Bez navodnika džoker proširuje shell, pre nego što echo uopšte vidi argument.

Navodnik ostane otvoren

$ echo "zdravo
>

Shell čeka da zatvoriš navodnik. Zatvori ga i pritisni Enter, ili prekini sa Ctrl+C.

-e ne radi svuda isto

Ponašanje se razlikuje između shell-ova i između echo kao ugrađene komande i onog iz /usr/bin. Ako ti je bitna predvidivost — u skriptama koristi printf:

$ printf "Prvi red\nDrugi red\n"

printf ne dodaje prelom reda sam, pa ga pišeš izričito. Za sve što ide u produkciju to je pouzdaniji izbor.

echo pokazuje lozinku u istoriji

Sve što otkucaš ostaje u ~/.bash_history. Nikad ne piši lozinke kroz echo — završe i u istoriji i u spisku procesa, gde ih vide i drugi korisnici.

Vežba

  1. Ispiši svoje korisničko ime i home direktorijum u jednom redu
  2. Uporedi echo "$HOME" i echo '$HOME'
  3. Ispiši rečenicu koja sadrži znak $ doslovno
  4. Napravi fajl sa tri reda, koristeći > pa dvaput >>
  5. Ispiši trenutni datum unutar rečenice, kroz $( )
  6. Vidi šta radi echo * u direktorijumu punom fajlova
  7. Proveri sa type koje su od ovih ugrađene, a koje pravi programi: echo, ls, cd, grep

Sledeći korak → history

Povezano: Piping i redirekcija · tee · Bash skripte 2 — promenljive i argumenti · Linux osnove

Comments

Popular posts from this blog

Početak u Linuxu — šta je i zašto se uči

Konverzija tipova podataka u Pythonu

groupadd