Apa artinya “[[$ -! = * I *]] && kembali”?


22

Saya memiliki baris ini di saya .bashrcdan saya ingin tahu apa artinya ini

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

Jawaban:


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

Bendera default dijelaskan lebih terinci:

h adalah untuk "hash semua": ini memberitahu bash untuk mengingat lokasi perintah yang telah ditemukannya dengan menanyakan PATH Anda.

i 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 ekspansi brace

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


Ngomong-ngomong. Saya sudah ...

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

Saya kira pada dasarnya melakukan hal yang sama tetapi lebih mudah dibaca.


6

Pada dasarnya ini berarti "Jika flag shell tidak mengandung 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 mengetik 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 menghentikan eksekusi fungsi atau skrip saat ini.

&&

adalah operator AND logis . 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 && badalah singkatan untuk if a then b- ini disebut "evaluasi hubung singkat" dan itu membuat para guru pemrograman gila ketika Anda menggunakannya: D


2

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

Saya tidak tahu keseluruhan fungsinya, tetapi mungkin ada perintah dan flag yang ditetapkan di bawah garis itu jika Anda memiliki bash terbuka di TTY.


terima kasih :) tapi saya berharap untuk tahu apa sebenarnya $-dan *i*dan bagaimana cara mengetahui apakah mode interaktif atau tidak
Severus Tux

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.