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

19

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

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
    
задан Severus Tux 24.09.2016 в 13:18
источник

3 ответа

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

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

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

i для «интерактивного»: ввод ввода & amp; возврат назад.

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

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

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

Кстати. У меня есть ...

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

В принципе, то же, но проще читать, я предполагаю.

    
ответ дан Rinzwind 24.09.2016 в 13:32
источник
5

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

[[ ]]

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

$-

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

!=

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

*i*

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

return

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

&&

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

    
ответ дан delt 27.09.2016 в 17:34
2

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

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

    
ответ дан TheWanderer 24.09.2016 в 13:20