3.2. Entrecomillado y carácter de escape

El shell tiene una lista de caracteres que trata de manera especial (operadores) y una serie de palabras reservadas (palabras que tienen un significado especial para el Shell). Puede ver un listado de caracteres especiales y palabras reservadas en los apartados 2.2 y 2.4 del estándar.

Cuando queremos utilizar un carácter especial del shell o una palabra reservada del lenguaje sin que sea interpretada como tal o prevenir una expansión o sustitución indeseada (las expansiones y sustituciones se verán en un apartado posterior) es necesario indicárselo al shell mediante las comillas (simples o dobles) o el carácter de escape. Por ejemplo, para escribir el nombre de un fichero que contenga espacios, para pasar el símbolo < como argumento a un programa.

  • El carácter de escape \ : indica que el siguiente carácter debe preservar su valor literal. El carácter de escape se elimina de la línea una vez procesado. Si aparece al final de una línea, significa «continuación de línea» e indica que el comando continúa en la siguiente línea (puede ser utilizado para dividir líneas muy largas).

  • Comillas simples ' ' : todo texto ‘entrecomillado’ con comillas simples mantendrá su valor literal, no se producirá ninguna expansión ni sustitución y será considerado como una única palabra.

  • Comillas dobles ": es equivalente a usar comillas simples, salvo que en este caso sí se hacen expansiones y sustituciones (todas menos las expansiones de tilde y ruta y la sustitución de alias que veremos más adelante).

El entrecomillado de una cadena vacía ( '' o "") genera una palabra vacía (palabra que no tiene ningún carácter).

Vea el apartado 2.2 del estándar para obtener información detallada.

Tareas

  1. Ejecute los siguientes comandos en el terminal y analice los resultados:

    cd
    echo $PWD
    echo \$PWD
    echo '$PWD'
    echo "$PWD"
    echo hola \> a y b
    #se crea el fichero a
    echo hola > a y b
    ls
    cat a
    #se crea el fichero 'a y b'
    echo hola >"a y b"
    ls
    cat a\ y\ b