GNU/Linux >> Tutoriales Linux >  >> Linux

$var Vs ${var} ¿Y cotizar o no cotizar?

Puedo escribir

VAR=$VAR1
VAR=${VAR1}
VAR="$VAR1"
VAR="${VAR1}"

el resultado final para mí todo parece casi el mismo. ¿Por qué debo escribir uno u otro? ¿Alguno de estos no es portátil/POSIX?

Respuesta aceptada:

VAR=$VAR1 es una versión simplificada de VAR=${VAR1} . Hay cosas que el segundo puede hacer que el primero no puede, por ejemplo, hacer referencia a un índice de matriz (no portátil) o eliminar una subcadena (portátil POSIX). Consulte la sección Más sobre variables de la Guía de Bash para principiantes y Expansión de parámetros en la especificación POSIX.

Usando comillas alrededor de una variable como en rm -- "$VAR1" o rm -- "${VAR}" es una buena idea. Esto hace que el contenido de la variable sea una unidad atómica. Si el valor de la variable contiene espacios en blanco (bueno, caracteres en el $IFS variable especial, espacios en blanco por defecto) o caracteres globales y no los cita, luego cada palabra se considera para la generación de nombres de archivo (globs) cuya expansión genera tantos argumentos para lo que sea que esté haciendo.

$ find .
.
./*r*
./-rf
./another
./filename
./spaced filename
./another spaced filename
./another spaced filename/x
$ var='spaced filename'
# usually, 'spaced filename' would come from the output of some command and you weren't expecting it
$ rm $var
rm: cannot remove 'spaced': No such file or directory
# oops! I just ran 'rm spaced filename'
$ var='*r*'
$ rm $var
# expands to: 'rm' '-rf' '*r*' 'another spaced filename'

$ find .
.
./another
./spaced filename
./another spaced filename
$ var='another spaced filename'
$ rm -- "$var"
$ find .
.
./another
./spaced filename

Sobre portabilidad:
Según POSIX.1-2008 sección 2.6.2, las llaves son opcionales.


Linux
  1. Linux:¿por qué usamos Su y no solo Su?

  2. "nohup Sudo ..." no solicita contraseña y no hace nada?

  3. ¿Es legítimo el paquete que acabo de instalar y, de no ser así, cómo desinstalarlo?

  4. 7 Ejemplos de operadores Linux Grep OR, Grep AND, Grep NOT

  5. tmux:se cuelga y no carga, y no responde a ningún comando de opción

Cómo encontrar si un paquete está instalado o no en Linux y Unix

¿El bloqueo de pantalla de Ubuntu 17.10 no funciona y está gris?

Diferencia entre comillas simples y dobles en Bash Shell

Firefox cambió el flujo de trabajo de descarga, y no soy un fan

readlink -f y -e descripción de la opción no clara

¿Por qué mi crontab no funciona y cómo puedo solucionarlo?