Muchas veces necesitamos guardar la salida de un comando en una variable al escribir scripts Bash. El problema es que luego tenemos dificultades para interpretar o mostrar por salida estándar su contenido, ya que se pierden los saltos de línea. Esto se soluciona de manera sencilla utilizando comillas dobles.

Tomemos como ejemplo la salida del comando ps:

root@devuan:~# ps
  PID TTY          TIME CMD
 2529 pts/0    00:00:00 su
 2530 pts/0    00:00:00 bash
 4227 pts/0    00:00:00 ps

En algún script podría ser útil guardar su salida en una variable, para luego realizar algún tipo de procesamiento de esta información:

root@devuan:~# MYVAR=$(ps)

Aunque, si tratamos de mostrar por salida estándar el contenido de la variable, ocurre lo siguiente:

root@devuan:~# echo $MYVAR
PID TTY TIME CMD 2529 pts/0 00:00:00 su 2530 pts/0 00:00:00 bash 4229 pts/0 00:00:00 ps

Se pierden los saltos de línea.

Sin embargo, si se encierra la variable entre comillas dobles, el resultado es correcto:

root@devuan:~# echo "$MYVAR"
  PID TTY          TIME CMD
 2529 pts/0    00:00:00 su
 2530 pts/0    00:00:00 bash
 4229 pts/0    00:00:00 ps

Esto ocurre porque, al expandir la variable $MYVAR, echo interpreta que se trata de múltiples parámetros.

Veamos otro ejemplo:

root@devuan:~# echo 1\
> 2
12
root@devuan:~# echo "1
> 2"
1
2

En el primer caso echo asume que 1 y 2 son parámetros diferentes, separados (en vez de por espacio o tab) por un salto de línea (enter). En cambio, al utilizar comillas dobles (las comillas simples no sirven porque toman al string de manera literal, en vez de expandir la variable) echo interpreta que se trata de un único string. Además, como las comillas dobles preservan el valor literal de cada caracter (excepto $, `, \ y !) el salto de línea es renderizado de forma correcta.

Para más información:

man bash

(buscar "quotes" ejecutando /quotes).


Tal vez pueda interesarte


Compartí este artículo