(6 respuestas)
Cerrado hace 6 años.
Esto es parte de bash find
bucle, y me preguntaba cuál es la sintaxis más correcta y por qué?
filename="$(echo "$i" | cut -c5-)";
filename=`echo "$i" | cut -c5-`;
Ambos funcionan con el propósito de obtener el nombre del archivo.
Respuesta aceptada:
El manual de Bash señala que:
Se implementa la forma POSIX $() de sustitución de comandos (consulte Sustitución de comandos) y se prefiere a la shell Bourne " (que también se implementa para compatibilidad con versiones anteriores).
Entonces $(...)
se prefiere a `...`
en cualquier cosa nueva y específica de Bash que estés escribiendo¹. La sustitución de backtick no anida bien (tiene que escapar de ellos) y tiene un comportamiento de comillas ligeramente extraño. Puede anidar $(... $(...) ...)
arbitrariamente mucho sin problema. El manual describe el comportamiento de los dos como:
Cuando se utiliza la forma de sustitución de comillas inversas al estilo antiguo, la barra invertida conserva su significado literal excepto cuando va seguida de '$', '`' o ''. La primera comilla inversa no precedida por una barra invertida finaliza la sustitución del comando. Al usar la forma $(comando), todos los caracteres entre paréntesis forman el comando; ninguno recibe un trato especial.
Por lo general, se considera una buena práctica citar todas las expansiones de cadenas para evitar problemas de división de palabras, incluso en lugares donde no es estrictamente necesario, por lo que "$(...)"
también es una mejor práctica aquí.
Finalmente, dos partes relevantes de esa misma página de wooledge:
- También es hora de que te olvides de
`...`
. No es consistente con la sintaxis de Expansion y es terriblemente difícil de anidar sin una dosis de analgésicos. Usa$(...)
en su lugar. - Y por el amor de Dios, "¡Usa más comillas!" Proteja sus cadenas y expansiones de parámetros de la división de palabras. La división de palabras se comerá a sus bebés si no cita las cosas correctamente.
¹En realidad, incluso en POSIX sh
guiones, estos se consideran mejores prácticas. Todavía hay caparazones más débiles, pero sabrás si te los vas a encontrar.