Respuestas:
Es muy similar a los backticks ''.
Se llama sustitución de comando ( especificación posix ) e invoca una subshell. El comando entre llaves $()
o entre los backticks (``) se ejecuta en una subshell y la salida se coloca en el comando original.
A diferencia de los backticks, el $(...)
formulario puede estar anidado. Entonces puede usar la sustitución de comandos dentro de otra sustitución.
Hay algunas diferencias en los caracteres de escape dentro de la sustitución. Prefiero la $(...)
forma
echo `echo \`echo foo\`` bar
En POSIX o POSIX como conchas ( ksh
, bash
, ash
, zsh
, yash
...), es como ``
: el interior de comandos $()
se ejecuta y reemplazado por su salida estándar. La división de palabras y la generación de nombres de archivo se realizan a menos que$()
que entre comillas dobles. Así
chmod 777 $(pwd)
debe reemplazarse con:
chmod 777 "$(pwd)"
para evitar la división de palabras y la generación de nombre de archivo en la ruta actual del directorio de trabajo.
O incluso mejor (excepto bajo algunos shells, como zsh, en caso de que el directorio haya cambiado de nombre):
chmod 777 "$PWD"
Ya que $PWD
es una variable especial que contiene la ruta al directorio de trabajo actual en shells POSIX.
O mejor:
chmod 777 .
Dado que la .
entrada en el directorio actual es un enlace duro a ese directorio en sí.
Esto $()
se usa para ejecutar un comando principalmente dentro de otro comando.
chmod 777 $(pwd)
pwd
El comando proporciona el directorio de trabajo actual. Entonces, cuando todo se ejecuta, la salida de pwd reemplazará su posición y servirá como argumento para chmod
, y el resultado es que todo su directorio de trabajo actual obtiene el permiso 777
que supongo que nunca debería usarse en el entorno de producción;).