Was zeigt echo $ -1 an?

14

Was bedeutet die Ausgabe von echo $-1, echo $-2, echo $-3.. das?

Auf einer meiner Linux-Boxen zeigt es mir:

echo $-1
imsBEl1
echo $-2
imsBEl2

Und auf einer anderen Linux-Box zeigt es:

echo $-1
himBH1
echo $-2
himBH2

Mappen sie auf einige Speicherorte oder etwas anderes?

iGnite007
quelle
1
Der Titel weist in der Seitenleiste das folgende Problem auf: meta.stackexchange.com/q/229363/205964
IQAndreas
Ich habe eine vorgeschlagene Bearbeitung hinzugefügt, die versucht, sie zu korrigieren, aber ich habe bald festgestellt, dass es nur die Seitenleiste ist, die das MathJax rendert, was bedeutet, dass der Titel auf dieser Seite nur unnötige Backslashes enthält.
IQAndreas

Antworten:

19

POSIX definiert $ - als:

-

(Bindestrich.) Wird auf die aktuellen Optionsflags (die aus einem Buchstaben bestehenden Optionsnamen, die zu einer Zeichenfolge verkettet sind) erweitert, wie beim Aufruf, durch den speziellen Befehl set oder implizit durch die Shell angegeben.

So $-kann die Basis auf Ihrer Shell unterschiedlich sein oder wie Sie sie aufrufen.

1oder 2sind hier Token getrennt. Wenn die Shell kein Anführungszeichen sieht $, wird der Start aller Kandidaten für die Parametererweiterung, die Befehlssubstitution oder die arithmetische Erweiterung identifiziert. Es sah $-und erweiterte es, der Rest blieb unverändert.

Sie können sehen , Token Recognition Abschnitt für weitere Details.

cuonglm
quelle
18

echo $-druckt Optionen der aktuellen Shell (ohne -Präfix). 1und 2sind zusätzliche nicht verwandte Token.

Miroslav Franc
quelle
11

Hinzufügen zu Miroslavs Antwort:

echo $-druckt Optionen der aktuellen Shell (ohne -Präfix). 1 und 2 sind zusätzliche nicht verwandte Token.

Dies bedeutet, dass dies die Optionen für jede Maschine sind.

imsBEl
himBH

Ich habe die Bedeutung jeder Flagge recherchiert und die unten stehenden Bedeutungen mit geringfügiger Umschreibung zusammengestellt.

-ich

Wenn die Option -i vorhanden ist, ist die Shell interaktiv.

-m

Überwachungsmodus. Die Auftragssteuerung ist aktiviert.

-B

Die Shell führt eine Klammererweiterung durch ( siehe Klammererweiterung ). Dies ist standardmäßig aktiviert.

-s

Wenn die Option -s vorhanden ist oder nach der Optionsverarbeitung keine Argumente mehr vorhanden sind, werden Befehle aus der Standardeingabe gelesen. Mit dieser Option können die Positionsparameter beim Aufrufen einer interaktiven Shell festgelegt werden.

-E

Fehler

-l

Stellen Sie bash so ein, als ob es als Anmeldeshell aufgerufen worden wäre

-h

hashall

-H Geschichte Expansion

Diese Funktion ist standardmäßig für interaktive Shells aktiviert.

Aaron Hall
quelle
3

Wenn Sie die vorhandenen Antworten erweitern möchten, versuchen Sie echo "${-1}"und echo "${-2}"- es wird der Fehler "Falsche Ersetzung" angezeigt, da -1der Bindestrich nicht als Variablenname verwendet wird, um einen Wert zu ersetzen, wenn der Variablenname zuvor nicht definiert wurde. Beispielsweise:

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