Bash Comillas dobles para sustitución de variables y comandos.


Ejemplo

Las sustituciones de variables solo deben usarse entre comillas dobles.

calculation='2 * 3'
echo "$calculation"         # prints 2 * 3
echo $calculation           # prints 2, the list of files in the current directory, and 3
echo "$(($calculation))"    # prints 6

Fuera de las comillas dobles, $var toma el valor de var , lo divide en partes delimitadas por espacios en blanco e interpreta cada parte como un patrón global (comodín). A menos que desee este comportamiento, siempre ponga $var entre comillas dobles: "$var" .

Lo mismo se aplica a las sustituciones de comandos: "$(mycommand)" es la salida de mycommand , $(mycommand) es el resultado de split + glob en la salida.

echo "$var"             # good
echo "$(mycommand)"     # good 
another=$var            # also works, assignment is implicitly double-quoted
make -D THING=$var      # BAD! This is not a bash assignment.
make -D THING="$var"    # good
make -D "THING=$var"    # also good

Las sustituciones de comandos tienen sus propios contextos de cita. Escribiendo sustituciones arbitrariamente anidados es fácil porque el analizador hará un seguimiento de la profundidad de anidación en lugar de avidez en busca de la primera " carácter El resaltador de sintaxis Stackoverflow analiza este mal, sin embargo, por ejemplo..:

echo "formatted text: $(printf "a + b = %04d" "${c}")" # “formatted text: a + b = 0000”

Los argumentos variables para una sustitución de comando también deben incluirse entre comillas dobles dentro de las expansiones:

echo "$(mycommand "$arg1" "$arg2")"