Що означає "[[$ -! = * I *]] && return"?


22

У мене є цей рядок, .bashrcі я хотів би знати, що саме це означає

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

Відповіді:


33
  • $- означає "поточні прапори".
  • echo $-повертає "himBH". Це все за замовчуванням.
  • тому ... [[ $- != *i* ]] && returnнасправді робить те, що йдеться вище в коментарі: перевіряє, чи встановлений інтерактивний прапор. [[І]] роблять його булевим, так що він закінчується "істинним" або "хибним". "помилковий & повернення" змушує його продовжуватись, "справжній & повернення" змушує його виконати.

Прапорці за замовчуванням пояснюються більш докладно:

h - це "хеш все": це вказує bash запам'ятати місця розташування команд, які він знайшов, запитуючи ваш PATH.

i - для "інтерактивних": введення вводу та отримання вихідних даних.

m - для "монітора": це дозволяє контролювати роботу

B призначений для "розширення дужки". Це дозволяє використовувати розширення дужок

Н - це "історія розширення". Це те, що дає змогу повторити команду зі своєї історії, попередньо встановивши її номер зі знаком оклику


До речі. Я маю ...

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

В основному робить те саме, але легше читати, я припускаю.


6

В основному це означає "Якщо прапори оболонки не містять малого регістру i, тоді зупиніть функцію / скрипт".

[[ ]]

позначає умовний вираз у bash

$-

означає прапори оболонки. Він буде містити "i", якщо оболонка інтерактивна (тобто ви можете вводити команди, на відміну від, вона виконує сценарій)

!=

просто означає "не дорівнює".

*i*

- це шаблон підстановки, який відповідає чому-небудь, що містить "i"

return

без жодних аргументів просто означає зупинити виконання поточної функції або сценарію.

&&

є логічним і оператором. Вираз праворуч, у цьому випадку return, буде оцінено (виконано) лише у тому випадку , якщо вираз зліва є істинним . Так що у багатьох мовах програмування a && bце скорочення if a then b- це називається "оцінка короткого замикання", і це зводить з розуму вчителів програмування, коли ви користуєтесь ним: D


2

Я б припустив, що так, як це говорить: якщо bash не відкритий в інтерактивній оболонці, тоді нічого не робіть.

Я не знаю всієї функції, але, мабуть, є команди та прапори, встановлені під цим рядком, якщо у вас є відкриття в TTY.


дякую :), але я з нетерпінням чекаю, що саме це таке, $-і *i*як він дізнається, чи є його інтерактивний режим чи ні
Severus Tux

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.