man bash
da esto sobre citas simples
El encerrar caracteres entre comillas simples conserva el valor literal de cada carácter dentro de las comillas. Una comilla simple no puede aparecer entre comillas simples, incluso cuando está precedida por una barra diagonal inversa.
Independientemente de lo que escriba en la línea de comando, bash lo interpreta y luego envía el resultado al programa al que se supone que debe enviarse. En este caso, si usa sed 's/$old_run/$new_run/'
, bash primero ve el sed
, lo reconoce como un presente ejecutable en $PATH
variable . El sed
ejecutable requiere una entrada. Bash busca la entrada y encuentra 's/$old_run/$new_run/'
. Las comillas simples dicen bash para no interpretar el contenido en ellas y pasarlas como están. Entonces, bash luego los pasa a sed. Sed da un error porque $
solo puede ocurrir al final de la línea.
En cambio, si usamos comillas dobles, es decir, "s/$old_run/$new_run/"
bash lo ve e interpreta $old_run
como un nombre de variable y realiza una sustitución (esta fase se llama expansión de variable). Esto es de hecho lo que requerimos.
Pero, debes tener cuidado al usar comillas dobles porque, primero se interpretan con bash y luego se dan a sed. Por lo tanto, algunos símbolos como `deben escaparse antes de usarlos.