Что означает «[[$ -! = * I *]] && return»?

22

У меня есть эта строка в моем, .bashrcи я хотел бы знать, что именно это означает

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Северус Тукс
источник

Ответы:

33
  • $- означает «текущие флаги».
  • echo $-возвращает "himBH". Это все по умолчанию.
  • так ... [[ $- != *i* ]] && returnфактически делает то, что сказано выше в комментарии: он проверяет, установлен ли интерактивный флаг. [[И]] делают его булевым, поэтому оно становится «истинным» или «ложным». «false && return» заставляет его продолжать «true && return» заставляет его выполнить возврат.

Флаги по умолчанию объяснены более подробно:

h предназначен для «hash all»: это говорит bash запоминать расположение команд, найденных при запросе вашего PATH.

я для "интерактивного": ввод ввода и получение вывода.

м для «монитора»: это позволяет контролировать работу

B для "расширения скобки". Это позволяет использовать расширение скобки

H для "расширения истории". Это то, что позволяет вам повторно запустить команду из вашей истории, предварительно указав ее номер с восклицательным знаком.


Кстати. Я имею ...

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

По сути, делает то же самое, но я думаю, что его легче читать.

Rinzwind
источник
6

В основном это означает, что «если флаги оболочки не содержат строчную букву i, остановите функцию / скрипт здесь».

[[ ]]

обозначает условное выражение в bash

$-

означает флаги оболочки. Он будет содержать «i», если оболочка является интерактивной (т. Е. Вы можете вводить команды, а не выполнять сценарий)

!=

просто означает «не равно».

*i*

шаблон подстановочного знака, который соответствует чему-либо, содержащему «я»

return

без аргументов означает просто остановить выполнение текущей функции или скрипта.

&&

является логическим оператором И Выражение справа в этом случае returnбудет оцениваться (выполняться) только в том случае , если выражение слева равно true . Так что во многих языках программирования a && bэто сокращение для if a then b- это называется «оценка короткого замыкания», и это приводит учителей программирования в бешенство, когда вы его используете: D

DELT
источник
2

Я хотел бы предположить, что это как говорится: если bash не открыт в интерактивной оболочке, то ничего не делайте.

Я не знаю всей функции, но, вероятно, под этой строкой установлены команды и флаги на тот случай, если у вас открыт bash в TTY.

Странник
источник
спасибо :) но я с нетерпением жду , чтобы знать , что именно $-и *i*и как это выяснить , является ли его интерактивный режим или нет
Северус Tux