Co wyświetla echo $ -1?

14

Co oznacza wyjście echo $-1, echo $-2, echo $-3.. znaczy?

Na jednym z moich Linux-ów pokazuje:

echo $-1
imsBEl1
echo $-2
imsBEl2

A na innym Linux-ie pokazuje:

echo $-1
himBH1
echo $-2
himBH2

Czy są one mapowane na niektóre lokalizacje pamięci lub coś innego?

iGnite007
źródło
1
W tytule pojawia się następujący problem na pasku bocznym: meta.stackexchange.com/q/229363/205964
IQAndreas
Dodałem proponowaną edycję, która próbowała to naprawić, ale wkrótce zdałem sobie sprawę, że to tylko pasek boczny renderuje MathJax, co oznacza, że ​​gdy tytuł znajduje się na tej stronie, po prostu dostaje niepotrzebnych ukośników odwrotnych.
IQAndreas

Odpowiedzi:

19

POSIX zdefiniował $ - jako:

-

(Łącznik.) Rozwija się do bieżących flag opcji (jednuliterowe nazwy opcji połączone w ciąg), jak określono przy wywołaniu, za pomocą wbudowanego specjalnego polecenia set lub pośrednio przez powłokę.

$-Może więc być różna podstawa powłoki lub sposób jej wywołania.

1lub 2są tutaj oddzielnymi żetonami. Gdy powłoka nie wyświetli cudzysłowu $, zidentyfikuje początek dowolnych kandydatów do interpretacji parametrów, podstawiania poleceń lub interpretacji arytmetycznej. Zobaczył $-i rozwinął go, pozostawiając resztę bez zmian.

Aby uzyskać więcej informacji, zobacz sekcję Rozpoznawanie tokenów.

Cuonglm
źródło
18

echo $-wypisuje opcje bieżącej powłoki (bez -prefiksu). 1i 2są dodatkowymi niepowiązanymi żetonami.

Miroslav Franc
źródło
11

Uzupełnienie odpowiedzi Miroslava:

echo $-wypisuje opcje bieżącej powłoki (bez -prefiksu). 1 i 2 to dodatkowe niepowiązane żetony.

Oznacza to, że są to opcje odpowiednio dla każdej maszyny.

imsBEl
himBH

Zbadałem znaczenie każdej flagi i zestawiłem znaczenia poniżej, z niewielkimi parafrazami.

-ja

Jeśli jest dostępna opcja -i, powłoka jest interaktywna.

-m

Tryb monitorowania. Kontrola zadań jest włączona.

-B

Powłoka wykonuje rozwinięcie nawiasu ( patrz Rozszerzenie nawiasu ). To jest domyślnie włączone.

-s

Jeśli opcja -s jest obecna lub jeśli po przetworzeniu opcji nie pozostały żadne argumenty, polecenia są odczytywane ze standardowego wejścia. Ta opcja umożliwia ustawienie parametrów pozycyjnych podczas wywoływania powłoki interaktywnej.

-MI

pomyłka

-l

Spraw, aby bash działał tak, jakby został wywołany jako powłoka logowania

-h

hashall

-H Rozszerzenie historii

Ta funkcja jest domyślnie włączona dla interaktywnych powłok.

Aaron Hall
źródło
3

Aby rozwinąć istniejące odpowiedzi, spróbuj echo "${-1}"i echo "${-2}"- pojawi się błąd „Nieprawidłowe podstawienie”, ponieważ zamiast używać -1jako nazwy zmiennej myślnik służy do podstawienia wartości, jeśli nazwa zmiennej przed nią jest niezdefiniowana. Na przykład:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
l0b0
źródło