Apa arti dari tanda tanya dalam perintah terminal?

Jawaban:

15

Itu disebut Wildcard (pola globbing)

Wildcard standar (juga dikenal sebagai pola globbing) digunakan oleh berbagai utilitas baris perintah untuk bekerja dengan banyak file.
Wildcard standar digunakan oleh hampir semua perintah (termasuk mv, cp, rm dan banyak lainnya).

  • (question mark)

    ini dapat mewakili karakter tunggal apa pun. Jika Anda menentukan sesuatu di baris perintah seperti "hd?" GNU / Linux akan mencari hda, hdb, hdc dan setiap huruf / angka lainnya antara az, 0-9.

  • *(asterisk)

    ini dapat mewakili sejumlah karakter (termasuk nol, dengan kata lain, nol atau lebih karakter). Jika Anda menentukan "cd *" itu akan menggunakan "cda", "cdrom", "cdrecord" dan apa pun yang dimulai dengan "cd" juga termasuk "cd" itu sendiri. "m * l" dapat dengan mill, mull, ml, dan apa pun yang dimulai dengan m dan berakhir dengan l.

  • [ ] (square brackets)

    menentukan rentang. Jika kamu melakukan m [a, o, u] m itu bisa menjadi: mam, mum, mom jika kamu melakukannya: m [ad] m itu bisa menjadi apa saja yang dimulai dan diakhiri dengan m dan memiliki karakter a sampai d inbetween. Sebagai contoh, ini akan bekerja: mam, mbm, mcm, mdm. Jenis wildcard ini menetapkan hubungan “atau” (Anda hanya perlu satu yang cocok).

  • { } (curly brackets)

    istilah dipisahkan dengan koma dan setiap istilah harus berupa nama sesuatu atau wildcard. Wildcard ini akan menyalin apa pun yang cocok dengan wildcard (s), atau nama persis (s) (hubungan "atau", satu atau yang lain).


Misalnya, ini akan valid:

  • cp { .doc, .pdf} ~

    Ini akan menyalin apa pun yang berakhir dengan .doc atau .pdf ke direktori home pengguna. Perhatikan bahwa spasi tidak diizinkan setelah koma (atau di mana pun).

  • [!]

    Konstruk ini mirip dengan konstruk [], kecuali daripada mencocokkan karakter apa pun di dalam tanda kurung, konstruksinya akan cocok dengan karakter apa pun, asalkan tidak terdaftar di antara [dan]. Ini TIDAK logis. Misalnya rm myfile [! 9] akan menghapus semua file my * (mis. Myfiles1, myfiles2 dll) tetapi tidak akan menghapus file dengan nomor 9 di mana saja di dalam namanya.

  • \ (backslash)

    digunakan sebagai karakter "pelarian", yaitu untuk melindungi karakter khusus berikutnya. Jadi, "\" mencari garis miring terbalik. Perhatikan Anda mungkin perlu menggunakan tanda kutip dan garis miring terbalik.

untuk lebih banyak contoh: kunjungi halaman ini

Pengguna Terdaftar
sumber
3
Perlu disebutkan bahwa apt-get removememerlukan nama paket , bukan nama file, yang membuat ekspansi wildcard oleh shell sebagian besar tidak berguna. Jika Anda ingin menghapus serangkaian paket, Anda perlu menggunakan ekspresi reguler penuh, dikutip dengan tepat untuk mencegah shell mencoba menafsirkannya sebagai bola (misalnya apt-get remove 'gnome.*').
4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> SALAH. wildcard ini sedang dikembangkan oleh shell dan apa yang diterima perintah adalah hasil dari ekspansi (yaitu file yang cocok dengan pola) alih-alih pola. (jika tidak ada file yang cocok dengan pola maka pola itu akan diteruskan langsung ke perintah,)
Carlos Campderrós
17

Secara umum, dalam Bash, a ?adalah pola gumpalan yang mengembang menjadi karakter yang sewenang-wenang.

Sebagai contoh:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

Ini mirip dengan a *, tetapi *mengembang ke 0 atau lebih karakter, sementara ?mengembang ke tepat satu (arbitrer) karakter.

Namun, dalam kasus khusus Anda, ?perintah dalam ternyata salah ketik.

Malte Skoruppa
sumber
Jadi itu tidak berguna / tidak perlu dalam kasus saya, kan?
Ooker
Iya. Bahkan itu diedit dari jawaban yang Anda tautkan ketika Anda mengajukan pertanyaan. :)
Malte Skoruppa
1
Tidak bisa mempercayainya: -o
Ooker
1
Bahkan jika itu adalah wildcard yang benar, penggunaan ini harus dihindari tanpa mengutip. apt-get memahami RE, tetapi jika file yang dipanggil gnome1ada di direktori saat ini, shell akan memperluasnya sebelum apt-get punya kesempatan melihatnya.
Rmano
@Ooker Anda tidak akan pernah melupakannya sekarang!
comrademike