Cosa visualizza echo $ -1?


14

Che cosa significa l'uscita di echo $-1, echo $-2, echo $-3.. significa?

Su uno dei miei box Linux, mi mostra:

echo $-1
imsBEl1
echo $-2
imsBEl2

E su un altro box Linux, mostra:

echo $-1
himBH1
echo $-2
himBH2

Stanno mappando su alcune posizioni di memoria o qualcos'altro?


1
Il titolo mostra il seguente problema nella barra laterale: meta.stackexchange.com/q/229363/205964
IQAndreas

Ho aggiunto una modifica proposta che ha cercato di risolverlo, ma presto ho capito che è solo la barra laterale che esegue il rendering di MathJax, il che significa che quando il titolo si trova in questa pagina, si ottengono semplicemente barre rovesciate non necessarie.
IQAndreas,

Risposte:


19

POSIX definito $ - come:

-

(Trattino.) Si espande ai flag di opzione correnti (i nomi delle opzioni a lettera singola concatenati in una stringa) come specificato al momento dell'invocazione, tramite il comando incorporato speciale impostato o implicitamente dalla shell.

Quindi $-può essere una base diversa sulla tua shell o su come invocarla.

1o 2sono token separati qui. Quando la shell vedrà una quotazione $, identificherà l'inizio di tutti i candidati per l'espansione dei parametri, la sostituzione dei comandi o l'espansione aritmetica. Lo vide $-e lo espanse, lasciando il resto invariato.

Puoi vedere la sezione Riconoscimento token per maggiori dettagli.


18

echo $-stampa le opzioni della shell corrente (senza -prefisso). 1e 2sono token non correlati aggiuntivi.


11

Aggiungendo alla risposta di Miroslav:

echo $-stampa le opzioni della shell corrente (senza -prefisso). 1 e 2 sono token non correlati aggiuntivi.

Ciò significa che queste sono le opzioni, rispettivamente per ogni macchina.

imsBEl
himBH

Ho studiato il significato di ogni bandiera e compilato i significati seguenti, con una piccola parafrasi.

-io

Se l'opzione -i è presente, la shell è interattiva.

-m

Modalità monitor. Il controllo lavoro è abilitato.

-B

La shell esegue l'espansione del controvento ( consultare Espansione del controvento ). Questo è attivo per impostazione predefinita.

-S

Se l'opzione -s è presente o se non rimangono argomenti dopo l'elaborazione dell'opzione, i comandi vengono letti dall'input standard. Questa opzione consente di impostare i parametri posizionali quando si richiama una shell interattiva.

-E

errtrace

-l

Fai agire bash come se fosse stato invocato come shell di login

-h

hashall

-H Espansione della storia

Questa funzione è abilitata per impostazione predefinita per le shell interattive.


3

Per espandere le risposte esistenti, prova echo "${-1}"e echo "${-2}"otterrai un errore "Sostituzione errata" perché anziché utilizzare -1come nome di variabile il trattino viene utilizzato per sostituire un valore se il nome della variabile prima non è definito. Per esempio:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.