Primer caso:
echo $'$foo'
Qué ecos $foo
(es decir, el primero $
en mi comando echo se descarta)
El primero $
se ejecuta como un comando. Echo no requiere espacios entre argumentos, solo los toma.
Entonces echo se $'$foo'
expande para ejecutar el comando $
(que no es un comando, por lo que lo ignora) y luego echo '$foo'
. Todo lo que ''
se toma se toma al pie de la letra, no lo expande ni nada. Puedes poner lo que quieras '' y no pasa nada.
Si reemplaza el $
con $$
ella, se hace eco del ID del proceso.
Segundo:
echo $"$foo"
Este eco pwd
(lo que significa que bash se expande $foo
, mi variable, a su valor)
Eso es porque ""
no evita que se expanda. ""
normalmente se usa para garantizar que haya un valor con el que comparar.
Si tiene una variable que podría estar vacía (por ejemplo, es de un grep
resultado), entonces desea compararla con otro valor / variable, debe ingresar la primera variable ""
. Esto asegura que siempre haya una comparación para verificar, en lugar de solo una sección vacía de código (como ve bash) que da un error.
Finalmente, el número 3. Esto es interesante.
echo $`$foo`
Este eco $~/scripts
(esperaba que se imprimiera ~/scripts
y no $~/scripts
)
Eso es porque (en este caso) echo está imprimiendo el $
personaje primero. Poner algo en los backticks hace que el valor de la variable se ejecute como un comando (la mejor manera de hacerlo en versiones más recientes de bash es $(command)
)
Entonces, primero se hace eco, $
luego se expande `$foo`
a lo `pwd`
que se ejecuta y regresa ~/Scripts
. Pero teníamos la $
impresión antes, así que todo el resultado es $~/Scripts
.