Что такое отображение эха $ -1?

Что означает результат echo $-1 , echo $-2 , echo $-3 ..?

На одном из моих ящиков Linux это показывает мне:

 echo $-1 imsBEl1 echo $-2 imsBEl2 

И в другом Linux-окне он показывает:

 echo $-1 himBH1 echo $-2 himBH2 

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

4 Solutions collect form web for “Что такое отображение эха $ -1?”

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

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

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

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

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

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

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

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

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

 imsBEl himBH 

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

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

-m

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

-B

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

-s

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

-E

errtrace

-l

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

-час

hashall

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

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

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

 $ unset foo $ echo "${foo-bar}" bar $ foo=test $ echo "${foo-bar}" test 
  • Как найти и запустить скрипт bash?
  • zsh compinit: небезопасные каталоги, запустить compaudit для списка
  • в zsh, как скрыть обратную косую черту в меню завершения
  • terminfo отключить XON / XOFF
  • Есть ли элегантный способ установить переменную оболочки в содержимое файла?
  • Как извлечь и объединить значения переменных в другую переменную?
  • Используйте #! / Bin / sh или #! / Bin / bash для совместимости с Ubuntu-OSX и простоты использования и POSIX
  • Cron автоматизированный сценарий bash для запуска run 1 скрипт bash, затем другой, плюс проверка целостности
  • Преобразование IP-адреса в координаты с использованием базы данных
  • Сценарий оболочки читает отдельно столбцы из файла
  • SSH замедляется при стартовой сессии
  • find и sed (найти и заменить) вызывает незаконную последовательность байтов в Mac OS X
  • Linux и Unix - лучшая ОС в мире.