GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuáles son los parámetros/variables especiales de Shell (bash)?

Encontré un parámetro especial con Bash que comienza con $ señal. Ejemplo:cuando buscaba el estado de salida, sabía sobre $? , ID de proceso por $$ etc.

Entonces, estoy compartiendo esta publicación para saber cuáles son los parámetros especiales de bash (shell) y su uso.

Respuesta aceptada:

Haciendo referencia a 3.4.2 Parámetros especiales del Manual de referencia de Bash.

Parámetros especiales:

  • $*

($*) Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión no está entre comillas dobles, cada parámetro posicional se expande a una palabra separada. En contextos donde se realiza, esas palabras están sujetas a una mayor división de palabras y expansión de nombres de rutas. Cuando la expansión ocurre entre comillas dobles, se expande a una sola palabra con el valor de cada parámetro separado por el primer carácter de la variable especial IFS. Es decir, “$*” equivale a “$1c$2c…”, donde c es el primer carácter del valor de la variable IFS. Si IFS no está configurado, los parámetros están separados por espacios. Si IFS es nulo, los parámetros se unen sin que intervengan separadores.

  • [correo electrónico protegido]

([email protected]) Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión ocurre entre comillas dobles, cada parámetro se expande a una palabra separada. Es decir, “[email protected]” equivale a “$1” “$2”…. Si la expansión entre comillas dobles ocurre dentro de una palabra, la expansión del primer parámetro se une con la parte inicial de la palabra original y la expansión del último parámetro se une con la última parte de la palabra original. Cuando no hay parámetros posicionales, "[email protected]" y [email protected] se expanden a nada (es decir, se eliminan).

  • $#

($#) Se expande al número de parámetros posicionales en decimal.

  • $?

($?) Se expande al estado de salida de la canalización en primer plano ejecutada más recientemente.

  • $-

($-, un guión.) Se expande a los indicadores de opción actuales según lo especificado en la invocación, por el comando integrado set, o aquellos establecidos por el propio shell (como la opción -i).

  • $$

($$) Se expande al ID de proceso del shell. En un () subshell, se expande al ID de proceso del shell que invoca, no al subshell.

  • $!

($!) Se expande al ID de proceso del trabajo colocado más recientemente en segundo plano, ya sea que se ejecute como un comando asincrónico o usando el bg integrado (ver Funciones integradas de control de trabajos).

  • $0

($0) Se expande al nombre del shell o script de shell. Esto se establece en la inicialización del shell. Si se invoca Bash con un archivo de comandos (ver Shell Scripts), se establece $0 en el nombre de ese archivo. Si Bash se inicia con la opción -c (consulte Invocación de Bash), entonces $0 se establece como el primer argumento después de la cadena que se ejecutará, si hay alguna presente. De lo contrario, se establece en el nombre de archivo utilizado para invocar a Bash, como lo indica el argumento cero.

Esto también se puede imprimir desde la página man de bash:

$ man bash | awk '/Special Parameters$/','/Shell Variables$/'

Los anteriores son los mismos que los parámetros especiales definidos por POSIX.

Relacionado:¿Qué hace "set -f" en Korn Shell?

Además, están los parámetros posicionales $1 , $2 , … que contienen los argumentos de la línea de comando para el shell o la función actual (3.4.1 Parámetros posicionales). También son una función POSIX.

Las versiones anteriores de Bash también incluían $_ como un parámetro especial, pero ahora aparece entre otras variables establecidas por el shell (5.2 Variables Bash). $_ no es POSIX y es posible que otros shells no lo admitan.

  • $_

($_ , un guión bajo.) En el inicio del shell, establezca el nombre de ruta absoluto utilizado para invocar el shell o el script de shell que se ejecuta tal como se pasa en el entorno o la lista de argumentos. Posteriormente, se expande hasta el último argumento del comando anterior, luego de la expansión. También establezca el nombre de ruta completo utilizado para invocar cada comando ejecutado y colocado en el entorno exportado a ese comando. Al revisar el correo, este parámetro contiene el nombre del archivo de correo.


Linux
  1. ¿Diferencia entre las variables de Shell que se exportan y las que no están en Bash?

  2. ¿Las variables que no son de entorno se pasan al subshell invocado por sustitución de comando?

  3. ¿Entiendes el significado de `$_`?

  4. ¿Funciones en variables de Shell?

  5. ¿Compartir variables entre múltiples scripts de shell?

¿Navegación rápida de directorios en Bash Shell?

¿Existen convenciones de nomenclatura para las variables en los scripts de Shell?

¿La diferencia en el uso entre las variables de shell y las variables de entorno?

¿Qué son los separadores de palabras de Readline?

¿Qué shell debo usar:Tcsh Vs Bash?

¿Cuáles son los diferentes tipos de shells en Linux?