Bash parámetros especiales

El shell trata varios parámetros de forma especial. Dichos parámetros sólo pueden ser referenciados, es decir, no se le pueden asignar valor.

  • *
    • Expande a los parámetros posicionales, comenzando por uno.
    • Cuando ocurre la expansión dentro de doble comillado, expande a una única palabra con el valor de cada parámetro separado por el primer caracter de la variable especial IFS. Es decir, "$*" equivale a "$1c$2c...", donde c es el primer caracter del valor de la variable IFS.
    • Si IFS no está definida, los parámetros son separados por espacios.
    • Si IFS es null, los parámetros son agrupados sin separadores.
  • @
    • Expando a los parámetros posicionales, comenzando por uno.
    • Cuando ocurre la expansión dentro de doble comillado, cada parámetro expande a una palabra separada. Es decir, "$@" equivale a "$1" "$2" ...
    • Si la expansión de doble comillado ocurre dentro de una palabra, la expandión del primer parámetro es agrupado con el comienzo de la palabra original y la expansión de la última palabra es agrupada con la última parte de la palabra original.
    • Cuando no hay parámetros posicionales, "$@" y $@ expanden a nada (i.e., son removidos).
  • #
    • Expande la cantidad de parámetros posicionales a un decimal.
  • ?
    • Expande al código de salida del "foreground pipeline" más recientemente ejecutado.
  • -
    • Expande a las banderas de opciones especificadas durante la invocación por el comando embutido set o aquellas puestas por el shell mismo (tal como la opción -i).
  • $
    • Expande al ID de proceso del shell. En un () subshell, expande al ID de proceso del shell, no del subshell.
  • !
    • Expande al ID de proceso del comando background (asíncrono) más recientemente ejecutado.
  • 0
    • Expande al nombre de shell o guión shell (script). Esto es puesto durante la inicialización shell.
    • Si bash es invocado con un archivo de comando, $0 es puesto al nombre de dicho archivo.
    • Si bash es iniciado con la opción -c, entonces $0 es puesto al primer argumento justo después de la cadena a ser ejecutada, si es que hay alguna presente. De cualqueir otra forma, es puesto al nombre de archivo utilizado para invocar bash, dado por el argumento cero.
  • _
    • Al arranque de shell, define la ruta absoluta utilizada para invocar el shell o guión shell en ejecución como se ha pasado al entorno o lista de argumentos.
    • Subsiguiente, expande al último argumento del comando previo, después de expansión.
    • También establece la ruta absoluta de archivo utilizada para invocar cada comando ejecutado y puesto en el entorno exportado a dicho comando.
    • Cuando se verifica mail, este parámetro mantiene e lnombre del archivo mail que se está verificando.

Algunos ejemplos

[gomix@movix ~]$ echo "$-" 
himBH
[gomix@movix ~]$ echo "$0" 
/bin/bash
[gomix@movix ~]$ echo "$#" 
0
[gomix@movix ~]$ ls xrandr
xrandr
[gomix@movix ~]$ echo "$?" 
0
[gomix@movix ~]$ ls xrandra
ls: no se puede acceder a xrandra: No existe el fichero o el directorio
[gomix@movix ~]$ echo "$?" 
2
[gomix@movix ~]$ echo "$$" 
5734
[gomix@movix ~]$ echo "$_" 
/bin/bash