Chapter 5. Cometes¶
Quan posem un text entre cometes, permet que es protegeixin part o tots els caràcters especials que contingui aquest, de manera que l’interpret de comandes no els interpreti de manera especial sinó com el seu significat literal.
Per exemple, l’asterisc * representa qualsevol caràcter tan en XXX 18.2. Globbing: expansió de noms de fitxer com en XXX Chapter 18. Regular Expressions.
$ ls -l [Vv]*
-rw-rw-r-- 1 bozo bozo 324 Apr 2 15:05 VIEWDATA.BAT
-rw-rw-r-- 1 bozo bozo 507 May 4 14:25 vartrace.sh
-rw-rw-r-- 1 bozo bozo 539 Apr 14 17:11 viewdata.sh
$ ls -l '[Vv]*'
ls: no s’ha pogut accedir a [Vv]*: El fitxer o directori no existeix
En l’exemple anterior veiem com per la primera crida a ls
, s’interpreta que es vol tots els
fitxers amb nom iniciat per V
o v
. En canvi, a la segona crida de ls
, s’interpreta que
el que s’ha de llistar és l’entrada amb el nom literal [Vv]*
que, al menys en aquest cas, no es
troba.
Quan escrivim un document en el nostre dia a dia, i posem una frase entre cometes, indiquem que aquest contingut és especial. En Bash, quan podem entre cometes un text, també l’estem marcant com a especial i protegim el seu significat literal.
Hi ha alguns programes i utilitats que requereixen determinats caràcters especials dins del text que reben com a entrada i, per tant, ens cal evitar que la Shell els interpreti abans que arribin al programa objectiu:
$ grep -H '[Pp]rimer' *.txt
fitxer1.txt:Primer la obligació i després la devoció.
fitxer2.txt:La obligació primer. Després la devoció.
En l’exemple anterior, la utilitat grep
rep literalment el text [Pp]primer
com a primer
argument de la crida, que interpretarà com a expressió regular per trobar tots els fitxers que
continguin les paraules primer
o Primer
. L’asterisc, en canvi, arribarà a grep
en forma
de llista de fitxers amb extensió .txt que es trobin al directori actual.
Nota
De fet, Bash acceptaria correctament grep -H [Pp]rimer *.txt
a menys que existeixi un fitxer
anomenat primer
o Primer
en el directori actual.
Les cometes també poden fer que echo
respecti els salts de línia. Mira XXX Chapter 15. Internal Commands and Builtins.
$ echo $(ls /etc/mail*)
/etc/mailcap /etc/mailcap.order /etc/mailname /etc/mail.rc
$ echo "$(ls /etc/mail*)"
/etc/mailcap
/etc/mailcap.order
/etc/mailname
/etc/mail.rc