Ce face Heredoc și here-string
Un here document (heredoc) furnizează textul dintre <<EOF și rândul care conține doar EOF ca intrare standard pentru comandă. Cuvântul de final poate fi oricare (EOF, END, SQL), dar trebuie să fie singur pe rând, fără spații înainte sau după.
Fără ghilimele (<<EOF), Bash înlocuiește în text variabilele și rezultatul comenzilor $(...). Cu ghilimele (<<'EOF'), textul rămâne exact cum este scris, util pentru scripturi sau șabloane care conțin $.
Varianta <<-EOF elimină tab-urile (nu spațiile) de la începutul rândurilor, ca blocul să poată fi indentat în cod. Here-string-ul <<< "text" trimite un singur șir, fără fișier temporar sau echo |.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
<<EOF |
Heredoc cu expansiune de variabile și comenzi. |
<<'EOF' |
Heredoc literal: $VAR și $(cmd) rămân neschimbate. |
<<-EOF |
Elimină tab-urile de la începutul rândurilor (inclusiv dinaintea lui EOF). |
cat > fișier <<EOF |
Scrie blocul într-un fișier (îl suprascrie); cu >> adaugă la final. |
<<< "text" |
Here-string: un singur șir trimis la intrarea comenzii, urmat de un rând nou. |
Exemple
Exemplul 1: Crearea unui fișier de configurare
Variabilele din bloc sunt înlocuite cu valorile lor în momentul scrierii.
APLICATIE="magazin"
PORT=8080
cat > config.ini <<EOF
[server]
nume = $APLICATIE
port = $PORT
oras = Iași
EOF
cat config.ini
Rezultat
[server]
nume = magazin
port = 8080
oras = Iași
Exemplul 2: Heredoc literal pentru un script generat
Cu 'EOF', textul $1 ajunge neschimbat în fișier și este evaluat abia când rulează noul script.
cat > salut.sh <<'EOF'
echo "Salut, $1!"
EOF
cat salut.sh
bash salut.sh Ana
Rezultat
echo "Salut, $1!"
Salut, Ana!
Exemplul 3: Here-string pentru comenzi care citesc de la intrare
read împarte șirul în cuvinte, iar tr îl transformă fără un echo separat.
read -r prenume nume <<< "Ana Popescu"
echo "Prenume: $prenume, nume: $nume"
tr 'a-z' 'A-Z' <<< "dexblog"
Rezultat
Prenume: Ana, nume: Popescu
DEXBLOG
Greșeli frecvente
- Spații sau indentare înaintea cuvântului de final:
EOFnu închide heredoc-ul, iar Bash afișează un avertisment că a ajuns la sfârșitul fișierului. - Folosirea lui
<<-cu spații în loc de tab-uri: sunt eliminate doar tab-urile, deci indentarea cu spații rămâne în text. - Uitarea ghilimelelor în
<<'EOF'când textul conține$: variabilele inexistente devin șiruri goale și conținutul se strică.
Comenzi înrudite
Redirecționare și conducte (Pipes): Redirecționarea fluxurilor standard de intrare (stdin), ieșire (stdout), erori (stderr) și legarea prin conducte (pipes).cat: Afișează conținutul unuia sau mai multor fișiere și le concatenează în ieșirea standard.read: Citește o linie de text de la tastatură sau din intrarea standard și o salvează într-o variabilă.