Что показывает echo $ -1?

14

Что делает вывод echo $-1, echo $-2, echo $-3.. значит?

На одной из моих коробок Linux он показывает мне:

echo $-1
imsBEl1
echo $-2
imsBEl2

И на другой коробке Linux, это показывает:

echo $-1
himBH1
echo $-2
himBH2

Они отображают некоторые области памяти или что-то еще?

iGnite007
источник
1
Заголовок показывает следующую проблему в боковой панели: meta.stackexchange.com/q/229363/205964
IQAndreas
Я добавил предлагаемое редактирование, которое пыталось исправить это, но вскоре понял, что только боковая панель отображает MathJax, что означает, что когда заголовок находится на этой странице, он просто получает ненужные обратные слэши.
IQAndreas

Ответы:

19

POSIX определил $ - как:

-

(Дефис.) Расширяется до флагов текущей опции (имена букв из одной буквы объединяются в строку), как указано при вызове, с помощью специальной встроенной команды set или неявно с помощью оболочки.

Так $-может быть разная база на вашей оболочке или как вы ее вызываете.

1или 2разделены токеном здесь. Когда оболочка видит кавычки $, она идентифицирует начало любых кандидатов на расширение параметров, подстановку команд или арифметическое расширение. Он увидел $-и расширил его, оставив остальное без изменений.

Вы можете увидеть раздел распознавания токенов для более подробной информации.

cuonglm
источник
18

echo $-выводит параметры текущей оболочки (без -префикса). 1и 2являются дополнительными несвязанными токенами.

Мирослав Франк
источник
11

Добавляем к ответу Мирослава:

echo $-выводит параметры текущей оболочки (без -префикса). 1 и 2 являются дополнительными несвязанными токенами.

Это означает, что это опции для каждой машины соответственно.

imsBEl
himBH

Я исследовал значение каждого флага и собрал значения, приведенные ниже, с небольшим перефразированием.

Если указана опция -i, оболочка является интерактивной.

-m

Режим монитора. Управление заданиями включено.

-B

Оболочка выполняет расширение скобок ( см. Расширение скобок ). Это включено по умолчанию.

-s

Если присутствует опция -s или если после обработки опции не осталось аргументов, команды считываются из стандартного ввода. Эта опция позволяет устанавливать позиционные параметры при вызове интерактивной оболочки.

-E

errtrace

-l

Заставьте bash действовать так, как если бы он был вызван как оболочка входа

-час

hashall

-H Расширение истории

Эта функция включена по умолчанию для интерактивных оболочек.

Аарон Холл
источник
3

Чтобы расширить существующие ответы, попробуйте echo "${-1}"и echo "${-2}"- вы получите ошибку «Плохая подстановка», потому что вместо использования -1в качестве имени переменной дефис используется для замены значения, если имя переменной перед ней не определено. Например:

$ unset foo
$ echo "${foo-bar}"
bar
$ foo=test
$ echo "${foo-bar}"
test
l0b0
источник