bash - ¿Cuáles son las variables especiales de shell de signo de dólar?
environment-variables dollar-sign (4)
Para ayudar a entender qué hacen $#
, $0
y $1
, ..., $n
, uso este script:
#!/bin/bash
for ((i=0; i<=$#; i++)); do
echo "parameter $i --> ${!i}"
done
Ejecutarlo devuelve una salida representativa:
$ ./myparams.sh "hello" "how are you" "i am fine"
parameter 0 --> myparams.sh
parameter 1 --> hello
parameter 2 --> how are you
parameter 3 --> i am fine
En Bash, parece que hay varias variables que contienen valores especiales, de significado consistente. Por ejemplo,
./myprogram &; echo $!
devolverá el PID del proceso que myprogram
segundo plano myprogram
. Sé de otros, como $?
que creo que es el actual TTY. ¿Hay otros?
Tenga cuidado con algunos de los ejemplos; $ 0 puede incluir una ruta principal, así como el nombre del programa. Por ejemplo, guarde este script de dos líneas como ./mytry.sh y luego ejecútelo.
#!/bin/bash
echo "parameter 0 --> $0" ; exit 0
Salida:
parameter 0 --> ./mytry.sh
Esto está en una versión actual (año 2016) de Bash, a través de Slackware 14.2
-
$1
,$2
,$3
, ... son los parámetros posicionales . -
"$@"
es una construcción similar a una matriz de todos los parámetros posicionales,{$1, $2, $3 ...}
. -
"$*"
es la expansión IFS de todos los parámetros posicionales,$1 $2 $3 ...
-
$#
es el número de parámetros posicionales. -
$-
opciones actuales establecidas para el shell. -
$$
pid de la shell actual (no subshell). -
$_
parámetro más reciente (o la ruta abs del comando para iniciar el shell actual inmediatamente después del inicio). -
$IFS
es el separador de campo (entrada). -
$?
es el estado de salida de tubería de primer plano más reciente. -
$!
es el PID del comando de fondo más reciente. -
$0
es el nombre del shell o script de shell.
La mayoría de los anteriores se pueden encontrar en Parámetros especiales en el Manual de referencia de Bash. Hay todas las variables de entorno establecidas por el shell .
Para obtener un índice completo, consulte el Índice de variables del manual de referencia .
-
$_
último argumento del último comando -
$#
número de argumentos pasados al script actual -
$*
/$@
lista de argumentos pasados al script como cadena / lista delimitada
la parte superior de mi cabeza. Google para bash variables especiales.