¿Qué muestra echo $ -1?

14

¿Qué hace la salida de echo $-1, echo $-2, echo $-3.. significa?

En uno de mis cuadros de Linux, me muestra:

echo $-1
imsBEl1
echo $-2
imsBEl2

Y en otra caja de Linux, muestra:

echo $-1
himBH1
echo $-2
himBH2

¿Están asignando a algunas ubicaciones de memoria o alguna otra cosa?

iGnite007
fuente
1
El título exhibe el siguiente problema en la barra lateral: meta.stackexchange.com/q/229363/205964
IQAndreas
Agregué una edición propuesta que trató de solucionarlo, pero pronto me di cuenta de que solo la barra lateral representa el MathJax, lo que significa que cuando el título está en esta página, solo se obtienen barras invertidas innecesarias.
IQAndreas

Respuestas:

19

POSIX definió $ - como:

-

(Guión). Se expande a los indicadores de opción actuales (los nombres de opción de una sola letra concatenados en una cadena) como se especifica en la invocación, mediante el comando incorporado especial establecido, o implícitamente por el shell.

Entonces, $-puede ser una base diferente en su shell o cómo lo invoca.

1o 2son fichas separadas aquí. Cuando el shell vea entre comillas $, identificará el inicio de cualquier candidato para la expansión de parámetros, sustitución de comandos o expansión aritmética. Lo vio $-y lo expandió, dejó el resto sin cambios.

Puedes ver la sección de Reconocimiento de tokens para más detalles.

Cuonglm
fuente
18

echo $-Imprime las opciones del shell actual (sin -prefijo). 1y 2son tokens adicionales no relacionados.

Miroslav Franc
fuente
11

Agregando a la respuesta de Miroslav:

echo $-Imprime las opciones del shell actual (sin -prefijo). 1 y 2 son tokens adicionales no relacionados.

Esto significa que estas son las opciones, para cada máquina, respectivamente.

imsBEl
himBH

Investigué el significado de cada bandera y compilé los significados a continuación, con una pequeña paráfrasis.

-yo

Si la opción -i está presente, el shell es interactivo.

-metro

Modo monitor El control de trabajo está habilitado.

-SI

El shell realiza la expansión de llaves ( ver Expansión de llaves ). Esto está predeterminado.

-s

Si la opción -s está presente, o si no quedan argumentos después del procesamiento de la opción, los comandos se leen desde la entrada estándar. Esta opción permite establecer los parámetros posicionales cuando se invoca un shell interactivo.

-MI

errtrace

-l

Haga que bash actúe como si hubiera sido invocado como un shell de inicio de sesión

-h

Hashall

-H Expansión de la historia

Esta característica está habilitada de forma predeterminada para shells interactivos.

Aaron Hall
fuente
3

Para ampliar las respuestas existentes, intente echo "${-1}"y echo "${-2}"obtendrá un error de "Sustitución incorrecta" porque, en lugar de usar -1como nombre de variable, el guión se usa para sustituir un valor si el nombre de la variable antes no está definido. Por ejemplo:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
l0b0
fuente