Pregunta ¿Cuáles son las variables especiales del shell del signo de dólar?


En Bash, parece que hay varias variables que tienen valores especiales de significado constante. Por ejemplo,

./myprogram &; echo $!

devolverá el PID del proceso que funcionó myprogram. Sé de otros, como $? que creo que es el TTY actual. ¿Hay otros?


627
2018-03-02 03:42


origen


Respuestas:


  • $1, $2, $3, ... son el parámetros posicionales.
  • "$@" es una construcción tipo array 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.
  • $- las opciones actuales establecidas para el shell.
  • $$ pid del 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 (de entrada).
  • $? es el estado de salida de canalización de primer plano más reciente.
  • $! es el PID del comando de fondo más reciente.
  • $0 es el nombre de la secuencia de comandos shell o shell.

La mayoría de los anteriores se pueden encontrar en Parámetros especiales en el Manual de referencia de Bash. Hay todos los variables de entorno establecidas por el shell.

Para obtener un índice completo, consulte el Manual de referencia Índice de variables.


1086
2018-03-02 04:04



  • $_ último argumento del último comando
  • $# número de argumentos pasados ​​a la secuencia de comandos actual
  • $* / $@ lista de argumentos pasados ​​al script como cadena / lista delimitada

la parte superior de mi cabeza. Google para variables especiales bash.


43
2018-03-02 03:46



Para ayudar a entender qué hacer $#, $0 y $1, ..., $n hacer, yo uso este script:

#!/bin/bash

for ((i=0; i<=$#; i++)); do
  echo "parameter $i --> ${!i}"
done

Al ejecutarlo se devuelve un resultado representativo:

$ ./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

8
2018-04-25 12:46



Tenga cuidado con algunos de los ejemplos; $ 0 puede incluir alguna ruta principal, así como también el nombre del programa. Por ejemplo, guarde este script de dos líneas como ./mytry.sh y 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


3
2017-09-14 10:19