Những gì [[$ -! = * I *]] && return có nghĩa là gì?


22

Tôi có dòng này trong tôi .bashrcvà tôi muốn biết chính xác điều này có nghĩa là gì

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

Câu trả lời:


33
  • $- có nghĩa là 'cờ hiện tại'.
  • echo $-trả về "himBH". Đó là tất cả mặc định.
  • vì vậy ... [[ $- != *i* ]] && returnthực sự làm những gì nó nói ở trên trong một bình luận: nó kiểm tra xem cờ tương tác có được đặt không. [[Và]] làm cho nó trở thành một boolean để nó kết thúc bằng "đúng" hoặc "sai". "false && return" làm cho nó tiếp tục "true && return" làm cho nó thực hiện trả lại.

Các cờ mặc định được giải thích chi tiết hơn:

h là để "băm tất cả": điều này cho bash nhớ các vị trí của các lệnh mà nó đã tìm thấy thông qua truy vấn PATH của bạn.

i là cho "tương tác": nhập đầu vào và nhận lại đầu ra.

m là dành cho "màn hình": điều này cho phép kiểm soát công việc

B là cho "niềng răng mở rộng". Điều này cho phép bạn sử dụng mở rộng cú đúp

H là cho "lịch sử mở rộng". Đây là những gì cho phép bạn chạy lại một lệnh từ lịch sử của bạn bằng cách mở đầu số của nó bằng một dấu chấm than


Nhân tiện. Tôi có ...

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

Về cơ bản, tôi cũng làm như vậy nhưng dễ đọc hơn.


6

Về cơ bản nó có nghĩa là "Nếu các cờ shell không chứa chữ thường i, thì hãy dừng chức năng / tập lệnh ở đây".

[[ ]]

biểu thị một biểu thức điều kiện trong bash

$-

có nghĩa là cờ vỏ. Nó sẽ chứa "i" nếu shell tương tác (nghĩa là bạn có thể nhập lệnh, ngược lại, nó đang thực thi một tập lệnh)

!=

đơn giản có nghĩa là "không bằng".

*i*

là một mẫu ký tự đại diện phù hợp với bất cứ thứ gì có chứa "i"

return

không có bất kỳ đối số nào chỉ có nghĩa là dừng việc thực thi hàm hoặc tập lệnh hiện tại.

&&

là toán tử AND logic . Biểu thức ở bên phải, trong trường hợp này return, sẽ chỉ được ước tính (được thực thi) nếu biểu thức ở bên trái là đúng . Vì vậy, trong nhiều ngôn ngữ lập trình, a && blà một cách viết tắt của if a then b- đây được gọi là "đánh giá ngắn mạch" và nó khiến giáo viên lập trình phát điên khi bạn sử dụng nó: D


2

Tôi sẽ cho rằng nó giống như nó nói: nếu bash không mở trong vỏ tương tác, thì đừng làm gì cả.

Tôi không biết toàn bộ chức năng, nhưng có thể có các lệnh và cờ được đặt bên dưới dòng đó trong trường hợp bạn mở bash trong TTY.


thanks :) nhưng tôi mong muốn được biết chính xác là những gì $-*i*và làm thế nào để nó tìm hiểu xem chế độ tương tác của nó hay không
Severus Tux

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.