Pertanyaan Apa artinya “[[$ -! = * I *]] && return” mean?


Saya memiliki baris ini di saya .bashrc dan saya ingin tahu apa artinya ini

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

20
2017-09-24 13:18


asal




Jawaban:


  • $- berarti 'bendera saat ini'.
  • echo $- mengembalikan "himBH". Itu semua adalah default.
  • jadi ... [[ $- != *i* ]] && return sebenarnya apa yang dikatakan di atas dalam komentar: ia memeriksa apakah bendera interaktif diatur. [[Dan]] membuatnya menjadi boolean sehingga berakhir dengan "benar" atau "salah". "false && return" membuatnya berjalan "true && return" membuatnya mengeksekusi pengembalian.

Bendera default dijelaskan lebih detail:

h adalah untuk "hash all": ini memberitahu bash untuk mengingat lokasi perintah yang ditemukannya melalui query PATH Anda.

saya adalah untuk "interaktif": memasukkan input & mendapatkan kembali output.

m adalah untuk "monitor": ini memungkinkan kontrol pekerjaan

B adalah untuk "brace expand". Ini memungkinkan Anda untuk menggunakan perluasan brace

H adalah untuk "histori berkembang". Inilah yang memungkinkan Anda untuk menjalankan kembali perintah dari sejarah Anda dengan mencantumkan nomornya dengan tanda seru


Ngomong-ngomong. Saya sudah ...

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

Pada dasarnya melakukan hal yang sama tetapi lebih mudah dibaca saya berasumsi.


32
2017-09-24 13:32





Pada dasarnya ini berarti "Jika bendera shell tidak berisi huruf kecil i, maka hentikan fungsi / skrip di sini".

[[ ]]

menunjukkan ekspresi kondisional dalam bash

$-

berarti bendera shell. Ini akan berisi "i" jika shell bersifat interaktif (mis. Anda dapat mengetikkan perintah, sebagai lawan dari, itu mengeksekusi skrip)

!=

berarti "tidak sama dengan".

*i*

adalah pola wildcard yang cocok dengan apa pun yang mengandung "i"

return

tanpa argumen berarti berhenti menjalankan fungsi atau skrip saat ini.

&&

itu logis DAN operator. Ekspresi di sebelah kanan, dalam hal ini return, hanya akan dievaluasi (dieksekusi) jika ekspresi di sebelah kiri adalah benar. Jadi dalam banyak bahasa pemrograman, a && b adalah singkatan untuk if a then b - Ini disebut "evaluasi sirkuit pendek" dan itu mendorong guru pemrograman gila ketika Anda menggunakannya: D


6
2017-09-27 17:34





Saya akan menganggap itu seperti yang dikatakan: jika bash tidak terbuka dalam shell interaktif, maka jangan lakukan apa-apa.

Saya tidak tahu seluruh fungsi, tetapi mungkin ada perintah dan bendera yang ditetapkan di bawah garis tersebut jika Anda memang mengalami bash terbuka dalam TTY.


2
2017-09-24 13:20



terima kasih :) tetapi saya menantikan untuk mengetahui apa sebenarnya itu $- dan *i* dan bagaimana cara mengetahui apakah modus interaktif atau tidak - Severus Tux
unix.stackexchange.com/questions/257571/… - TheWanderer