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.