En Bash, ¿cuáles son las diferencias entre comillas simples (''
) y comillas dobles (""
)?Diferencia entre comillas simples y dobles en Bash
Respuesta
Las comillas simples no interpolarán nada, pero las comillas dobles (por ejemplo, variables, marcadores, ciertos \
escapes, etc ...).
Ejemplo
[email protected]:~# echo "$(echo "upg")"
upg
[email protected]:~# echo '$(echo "upg")'
$(echo "upg")
El manual de Bash tiene esto que decir:
Encerrar caracteres entre comillas simples (
'
) preserva el valor literal de cada carácter dentro de las comillas. Es posible que una comilla simple no se produzca entre comillas simples, incluso cuando esté precedida por una barra diagonal inversa.personajes que encierran entre comillas dobles (
"
) preserva el valor literal de todos los caracteres dentro de las comillas, con la excepción de$
,`
,\
, y, cuando la expansión de historia está activado,!
. Los caracteres$
y`
conservan su significado especial entre comillas dobles (consulte Shell Expansions). La barra invertida conserva su significado especial solo cuando es seguida por uno de los siguientes caracteres:$
,`
,"
,\
, o nueva línea. Dentro de las comillas dobles, se eliminan las barras invertidas que son seguidas por uno de estos caracteres. Las barras diagonales anteriores a los caracteres sin un significado especial quedan sin modificar. Una comilla doble puede citarse entre comillas dobles precediéndola con una barra diagonal inversa. Si está habilitado, la expansión del historial se realizará a menos que se escape un!
que aparece entre comillas dobles usando una barra invertida. La barra invertida que precede al!
no se elimina. Los parámetros especiales*
y@
tienen un significado especial cuando están entre comillas dobles (ver Shell Parameter Expansion).
Si te refieres a lo que sucede cuando haces eco de algo, las comillas simples harán eco de lo que tienes entre ellas, mientras que las comillas dobles evaluarán las variables entre ellas y generarán el valor de la variable.
Por ejemplo, este
#!/bin/sh
MYVAR=sometext
echo "double quotes gives you $MYVAR"
echo 'single quotes gives you $MYVAR'
daré esto:
double quotes gives you sometext
single quotes gives you $MYVAR
El accepted answer es grande. Estoy haciendo una tabla que ayude a una comprensión rápida del tema. La explicación implica una variable simple a
, así como una matriz indexada arr
.
Si fijamos
a=apple # a simple variable
arr=(apple) # an array with a single element
y luego echo
la expresión en la segunda columna, que se pueden conseguir el resultado/comportamiento se muestra en la tercera columna. La cuarta columna explica el comportamiento.
# | Expression | Result | Comments
---+-------------+-------------+--------------------------------------------------------------------
1 | "$a" | apple | variables are expanded inside ""
2 | '$a' | $a | variables are not expanded inside ''
3 | "'$a'" | 'apple' | '' has no special meaning inside ""
4 | '"$a"' | "$a" | "" is treated literally inside ''
5 | '\'' | **invalid** | can not escape a ' within ''; use "'" or $'\'' (ANSI-C quoting)
6 | "red$arocks"| red | $arocks does not expand $a; use ${a}rocks to preserve $a
7 | "redapple$" | redapple$ | $ followed by no variable name evaluates to $
8 | '\"' | \" | \ has no special meaning inside ''
9 | "\'" | ' | \' is interpreted inside ""
10 | "\"" | " | \" is interpreted inside ""
11 | "*" | * | glob does not work inside "" or ''
12 | "\t\n" | \t\n | \t and \n have no special meaning inside "" or ''; use ANSI-C quoting
13 | "`echo hi`" | hi | `` and $() are evaluated inside ""
14 | '`echo hi`' | `echo hi` | `` and $() are not evaluated inside ''
15 | '${arr[0]}' | ${arr[0]} | array access not possible inside ''
16 | "${arr[0]}" | apple | array access works inside ""
17 | $'$a\'' | $a' | single quotes can be escaped inside ANSI-C quoting
18 | '!cmd' | !cmd | history expansion character '!' is ignored inside single quotes
19 | "!cmd" | cmd args | expands to the most recent command matching "cmd"
---+-------------+-------------+--------------------------------------------------------------------
Ver también:
- 1. Diferencia entre comillas simples y comillas dobles en Javascript
- 2. Diferencia entre '(comillas simples) y "(comillas dobles) en ASP.NET 4
- 3. Diferencia entre cadenas entre comillas simples y dobles en ActionScript
- 4. ¿Hay alguna diferencia entre comillas simples y dobles en Java?
- 5. comillas dobles vs comillas simples en JavaScript
- 6. comillas simples y dobles php
- 7. ¿Cuál es la diferencia entre comillas dobles y comillas simples en C#
- 8. ¿Cuál es la diferencia entre comillas simples y dobles comillas para definir una cadena en powershell
- 9. ¿Cuál es la diferencia entre comillas simples y dobles en Perl?
- 10. ¿Cuál es la diferencia entre comillas simples y dobles en Perl?
- 11. ¿Cuál es la diferencia entre comillas simples y dobles en SQL?
- 12. ¿Cómo puedo escapar entre comillas simples o dobles en CSS?
- 13. Diferencia entre el uso de comillas dobles y comillas en python
- 14. ¿Cuál es la diferencia entre usar comillas simples y comillas dobles para consultar un hash en Ruby?
- 15. ¿Escapando comillas simples y dobles en una cadena en rubí?
- 16. Tener comillas simples y dobles en una cadena de pitón
- 17. desprendimiento comillas simples y dobles en una cadena utilizando bash/Linux estándar comandos sólo
- 18. ¿Comillas simples o comillas dobles para concatenación variable?
- 19. Escape solo comillas simples (deje comillas dobles) con htmlspecialchars()
- 20. ¿Cómo puedo reemplazar las comillas dobles con comillas simples
- 21. Cómo eliminar comillas simples y dobles de una cadena
- 22. Escapar caracteres en JavaScript, comillas simples o dobles
- 23. escriben entre comillas dobles en pitón
- 24. escapar comillas simples
- 25. Regex.Matches C# comillas dobles
- 26. ¿Cuál es la diferencia de cadenas dentro de comillas simples o dobles en groovy?
- 27. ¿Cómo puedo diferenciar entre clics simples y dobles en .Net?
- 28. Cómo reemplazar palabras fuera de comillas dobles o simples
- 29. Uso de comillas simples o dobles de JavaScript para href's
- 30. ¿Cómo reemplazar todas las comillas dobles por comillas simples usando mysql replace?
Esa tabla es una respuesta a muchas preguntas sobre [Stackoverflow] (https://stackoverflow.com) . – C0deDaedalus
La respuesta aceptada dice al final 'Los parámetros especiales * y @ tienen un significado especial cuando están entre comillas dobles ', entonces, ¿cómo es que' "*" 'da como resultado' * '? –