Ini ialah arahan zshexpn yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
zshexpn - pengembangan dan penggantian zsh
DESCRIPTION
Jenis pengembangan berikut dilakukan dalam susunan yang dinyatakan dalam lima langkah:
Sejarah pengembangan
Ini dilakukan hanya dalam cengkerang interaktif.
Alias pengembangan
Alias dikembangkan serta-merta sebelum baris arahan dihuraikan seperti yang dijelaskan
di bawah Aliasing dalam zshmisc(1).
Proses Penggantian
Parameter pengembangan
Perintah Penggantian
Aritmetik pengembangan
Brace pengembangan
Kelima-lima ini dilakukan dalam satu langkah dalam fesyen kiri ke kanan. Selepas ini
pengembangan, semua kejadian yang tidak dipetik bagi aksara `\', `'' dan `"' adalah
dikeluarkan.
Filename pengembangan
Jika SH_FILE_EXPANSION pilihan ditetapkan, susunan pengembangan diubah suai untuk
keserasian dengan sh and ksh. Kalau macam itu nama fail pengembangan dilaksanakan
sejurus selepas itu alias pengembangan, sebelum set lima pengembangan yang disebutkan
atas.
Filename Generasi
Pengembangan ini, biasanya dirujuk sebagai globbing, sentiasa dilakukan terakhir.
Bahagian berikut menerangkan jenis pengembangan secara terperinci.
SEJARAH EXPANSION
Peluasan sejarah membolehkan anda menggunakan perkataan daripada baris arahan sebelumnya dalam baris arahan
anda sedang menaip. Ini memudahkan pembetulan ejaan dan pengulangan rumit
perintah atau hujah.
Sejurus sebelum pelaksanaan, setiap arahan disimpan dalam senarai sejarah, saiznya
dikawal oleh HISTSIZE parameter. Satu arahan terbaharu sentiasa dikekalkan
dalam apa jua keadaan. Setiap arahan yang disimpan dalam senarai sejarah dipanggil sejarah kategori acara dan adalah
diberikan nombor, bermula dengan 1 (satu) apabila shell bermula. Nombor sejarah
yang mungkin anda lihat dalam gesaan anda (lihat PENGEMBANGAN URUTAN CEPAT dalam zshmisc(1)) ialah
nombor yang akan diberikan kepada seterusnya perintah.
Pengenalan
Peluasan sejarah bermula dengan watak pertama hischars parameter, iaitu
`!' secara lalai, dan mungkin berlaku di mana-mana pada baris arahan; perluasan sejarah tidak
sarang. `!' boleh dilepaskan dengan `\' atau boleh disertakan di antara sepasang petikan tunggal
('') untuk menindas makna istimewanya. Petikan berganda akan tidak bekerja untuk ini. Mengikuti
watak sejarah ini ialah penunjuk acara pilihan (lihat bahagian `Acara
Designators') dan kemudian pilihan perkataan designator (bahagian `Word Designators'); jika
kedua-dua penunjuk ini tidak hadir, tiada pengembangan sejarah berlaku.
Baris input yang mengandungi pengembangan sejarah digemakan selepas dikembangkan, tetapi sebelum sebarang
pengembangan lain berlaku dan sebelum arahan dilaksanakan. Ia adalah bentuk yang diperluaskan ini
yang direkodkan sebagai peristiwa sejarah untuk rujukan kemudian.
Secara lalai, rujukan sejarah tanpa penentu acara merujuk kepada acara yang sama seperti mana-mana
rujukan sejarah terdahulu pada baris arahan itu; jika ia adalah satu-satunya rujukan sejarah dalam a
arahan, ia merujuk kepada arahan sebelumnya. Walau bagaimanapun, jika pilihan CSH_JUNKIE_HISTORY is
ditetapkan, maka setiap rujukan sejarah tanpa spesifikasi acara sentiasa kepada
perintah sebelumnya.
Contohnya, `!' ialah penentu acara untuk arahan sebelumnya, jadi `!!:1' sentiasa merujuk
kepada perkataan pertama perintah sebelumnya, dan `!!$' sentiasa merujuk kepada perkataan terakhir
perintah sebelumnya. Dengan CSH_JUNKIE_HISTORY tetapkan, kemudian `!:1' dan `!$' berfungsi sama
cara sebagai `!!:1' dan `!!$', masing-masing. Sebaliknya, jika CSH_JUNKIE_HISTORY tidak ditetapkan,
kemudian `!:1' dan `!$' merujuk kepada perkataan pertama dan terakhir, masing-masing, bagi peristiwa yang sama
dirujuk oleh rujukan sejarah lain yang terdekat sebelum mereka pada arahan semasa
baris, atau kepada arahan sebelumnya jika tiada rujukan sebelumnya.
Urutan watak `^foo^bar' (di mana `^' sebenarnya adalah watak kedua
hischars parameter) mengulangi arahan terakhir, menggantikan rentetan foo bersama bar. More
tepat, urutan `^foo^bar^' adalah sinonim dengan `!!:s^foo^bar^', maka yang lain
pengubah suai (lihat bahagian `Pengubah suai') mungkin mengikuti ` akhir^'. khususnya,
`^foo^bar^:G' melakukan penggantian global.
Jika cangkerang menemui jujukan aksara `!"' dalam input, mekanisme sejarah adalah
dilumpuhkan buat sementara waktu sehingga senarai semasa (lihat zshmisc(1)) dihuraikan sepenuhnya. `!"'adalah
dikeluarkan daripada input, dan sebarang `!' watak tidak mempunyai kepentingan khusus.
Bentuk sokongan sejarah arahan yang kurang mudah tetapi lebih mudah difahami disediakan oleh
yang fc terbina dalam.
Acara Penama
Penentu acara ialah rujukan kepada entri baris arahan dalam senarai sejarah. Di dalam
senarai di bawah, ingat bahawa huruf awal `!' dalam setiap item boleh ditukar kepada aksara lain
dengan menetapkan hischars parameter.
! Mulakan pengembangan sejarah, kecuali apabila diikuti dengan baris baharu kosong, `=' atau `('.
Jika diikuti dengan serta-merta dengan kata penunjuk (lihat bahagian `Penentukan Kata'),
ini membentuk rujukan sejarah tanpa penentu acara (lihat bahagian
`Gambaran Keseluruhan').
!! Rujuk arahan sebelumnya. Dengan sendirinya, pengembangan ini mengulangi yang sebelumnya
perintah.
!n Rujuk baris arahan n.
!-n Rujuk baris perintah tolak semasa n.
!str Rujuk arahan terkini bermula dengan str.
!?str[?]
Rujuk kepada arahan terkini yang mengandungi str. Yang mengekori `?' perlu jika
rujukan ini hendaklah diikuti oleh pengubah suai atau diikuti oleh mana-mana teks yang tidak
untuk dianggap sebahagian daripada str.
!# Rujuk baris arahan semasa yang ditaip setakat ini. Talian itu dilayan seakan-akan
telah lengkap sehingga dan termasuk perkataan sebelum perkataan dengan `!#' rujukan.
!{...} Menebat rujukan sejarah daripada aksara bersebelahan (jika perlu).
Perkataan Penama
Penanda perkataan menunjukkan perkataan atau perkataan baris arahan yang diberikan untuk disertakan
dalam rujukan sejarah. A `:' biasanya memisahkan spesifikasi acara daripada perkataan
penanda. Ia mungkin ditinggalkan hanya jika perkataan penanda bermula dengan `^', `$', `*',
`-' atau `%'. Penanda perkataan termasuk:
0 Perkataan input pertama (perintah).
n . nhujah ke.
^ Hujah pertama. Itu dia, 1.
$ Hujah terakhir.
% Perkataan dipadankan dengan (yang terkini) ?str carian.
x-y Rangkaian perkataan; x lalai kepada 0.
* Semua hujah, atau nilai nol jika tiada.
x* Singkatan `x-$'.
x- Seperti `x*' tetapi meninggalkan perkataan $.
Ambil perhatian bahawa `%' kata penunjuk hanya berfungsi apabila digunakan dalam salah satu daripada `!%', `!:%' atau `!?str?:%',
dan hanya apabila digunakan selepas a !? pengembangan (mungkin dalam arahan sebelumnya). Apa-apa lagi
mengakibatkan ralat, walaupun ralat itu mungkin bukan yang paling jelas.
Pengubah
Selepas penunjuk perkataan pilihan, anda boleh menambah urutan satu atau lebih daripada yang berikut
pengubah suai, setiap satu didahului oleh `:'. Pengubah suai ini juga berfungsi pada hasil daripada nama fail
generasi and parameter pengembangan, kecuali yang dinyatakan.
a Tukar nama fail menjadi laluan mutlak: menambahkan direktori semasa, jika
perlu, dan menyelesaikan sebarang penggunaan `..' dan `.' di jalan. Perhatikan bahawa
transformasi berlaku walaupun fail atau mana-mana direktori campur tangan tidak
wujud.
A Sebagai `a', tetapi juga menyelesaikan penggunaan pautan simbolik jika boleh. Perhatikan bahawa
resolusi `..' berlaku sebelum resolusi pautan simbolik. Panggilan ini adalah
bersamaan dengan a melainkan sistem anda mempunyai jalan sebenar panggilan sistem (sistem moden
lakukan).
c Selesaikan nama arahan menjadi laluan mutlak dengan mencari laluan arahan yang diberikan oleh
yang PATH pembolehubah. Ini tidak berfungsi untuk arahan yang mengandungi bahagian direktori.
Ambil perhatian juga bahawa ini biasanya tidak berfungsi sebagai kelayakan glob melainkan fail bagi
nama yang sama ditemui dalam direktori semasa.
e Alih keluar semua kecuali bahagian sambungan nama fail berikutan `.'; lihat
takrif sambungan nama fail dalam perihalan r pengubahsuai di bawah.
Ambil perhatian bahawa mengikut definisi itu, hasilnya akan kosong jika rentetan berakhir
dengan `.'.
h Alih keluar komponen nama laluan mengekori, meninggalkan kepala. Ini berfungsi seperti `nama panggilan'.
l Tukar perkataan kepada semua huruf kecil.
p Cetak arahan baharu tetapi jangan laksanakannya. Hanya berfungsi dengan pengembangan sejarah.
q Petik perkataan yang diganti, terlepas daripada penggantian selanjutnya. Berfungsi dengan sejarah
pengembangan dan pengembangan parameter, walaupun untuk parameter ia hanya berguna jika
teks yang terhasil hendaklah dinilai semula seperti oleh menipu.
Q Keluarkan satu peringkat petikan daripada perkataan yang digantikan.
r Alih keluar sambungan nama fail meninggalkan nama akar. Rentetan tanpa nama fail
sambungan tidak diubah. Sambungan nama fail ialah `.' diikuti oleh sebarang bilangan
aksara (termasuk sifar) yang bukan `.' mahupun `/' dan itu terus ke
hujung rentetan. Sebagai contoh, lanjutan `foo.orig.c' ialah `.c', dan
`dir.c/foo' tidak mempunyai sambungan.
s/l/r[/]
Pengganti r khususnya l seperti yang diterangkan di bawah. Penggantian dilakukan hanya untuk yang pertama
rentetan yang sepadan l. Untuk tatasusunan dan untuk penjanaan nama fail, ini terpakai kepada
setiap perkataan teks yang diperluaskan. Lihat di bawah untuk nota lanjut tentang penggantian.
Borang-borang `gs/l/r' dan `s/l/r/:G' lakukan penggantian global, iaitu pengganti
setiap kejadian r khususnya l. Perhatikan bahawa g or :G mesti muncul dalam betul-betul
kedudukan yang ditunjukkan.
Lihat nota lanjut tentang bentuk penggantian ini di bawah.
& Ulang yang sebelumnya s penggantian. Suka s, boleh didahului serta-merta dengan a g.
Dalam pengembangan parameter & mesti muncul di dalam pendakap, dan dalam penjanaan nama fail
ia mesti dipetik dengan garis miring ke belakang.
t Keluarkan semua komponen nama laluan utama, tinggalkan ekor. Ini berfungsi seperti
`nama asas'.
u Tukar perkataan kepada semua huruf besar.
x suka q, tetapi pecahkan perkataan di ruang kosong. Tidak berfungsi dengan parameter
pengembangan.
. s/l/r/ penggantian berfungsi seperti berikut. Secara lalai bahagian kiri penggantian
bukan corak, tetapi rentetan watak. Sebarang aksara boleh digunakan sebagai pembatas dalam
tempat `/'. Segaris ke belakang memetik watak pembatas. Watak `&', di dalam
sebelah kanan r, digantikan dengan teks dari sebelah kiri l. `&' boleh jadi
dipetik dengan garis miring ke belakang. A null l menggunakan rentetan sebelumnya sama ada dari sebelumnya l or
daripada rentetan imbasan kontekstual s daripada `!?s'. Anda boleh meninggalkan pembatas paling kanan jika a
baris baharu segera menyusul r; paling kanan `?' dalam imbasan konteks juga boleh
ditinggalkan. Perhatikan rekod yang sama yang terakhir l and r dikekalkan dalam semua bentuk
pengembangan.
Ambil perhatian bahawa jika `&' digunakan dalam kelayakan glob satu garis miring ke belakang tambahan diperlukan sebagai a & ialah
watak istimewa dalam kes ini.
Juga ambil perhatian bahawa susunan pengembangan mempengaruhi tafsiran l and r. Apabila digunakan
dalam pengembangan sejarah, yang berlaku sebelum sebarang pengembangan lain, l and r dilayan sebagai
rentetan literal (kecuali seperti yang dijelaskan untuk HIST_SUBST_PATTERN di bawah). Apabila digunakan dalam
pengembangan parameter, penggantian r ke dalam nilai parameter dilakukan terlebih dahulu, dan
maka sebarang proses, parameter, arahan, aritmetik atau rujukan tambahan adalah
digunakan, yang mungkin menilai penggantian dan pengembangan tersebut lebih daripada sekali jika l muncul
lebih daripada sekali dalam nilai permulaan. Apabila digunakan dalam kelayakan glob, sebarang penggantian atau
pengembangan dilakukan sekali pada masa kelayakan dihuraikan, walaupun sebelum `:s'
ungkapan itu sendiri terbahagi kepada l and r pihak.
Jika pilihan HIST_SUBST_PATTERN ditetapkan, l dianggap sebagai corak bentuk biasa
diterangkan dalam bahagian PENJANAAN NAMA FAIL di bawah. Ini boleh digunakan di semua tempat
di mana pengubahsuai tersedia; ambil perhatian, bagaimanapun, bahawa dalam parameter kelayakan globbing
penggantian telah berlaku, jadi parameter dalam rentetan gantian sepatutnya
dipetik untuk memastikan ia diganti pada masa yang betul. Perhatikan juga bahawa rumit
corak yang digunakan dalam kelayakan globbing mungkin memerlukan notasi kelayakan glob lanjutan
(#q:s/.../.../) agar shell mengenali ungkapan sebagai kelayakan glob.
Selanjutnya, ambil perhatian bahawa corak buruk dalam penggantian tidak tertakluk kepada NO_BAD_PATTERN
pilihan jadi akan menyebabkan ralat.
Bila HIST_SUBST_PATTERN ditetapkan, l boleh bermula dengan a # untuk menunjukkan bahawa corak mesti
padankan pada permulaan rentetan yang akan digantikan, dan a % mungkin muncul pada permulaan atau
selepas satu # untuk menunjukkan bahawa corak mesti sepadan di hujung rentetan menjadi
digantikan. The % or # boleh dipetik dengan dua garis miring ke belakang.
Sebagai contoh, sekeping kod penjanaan nama fail berikut dengan EXTENDED_GLOB
pilihan:
cetak *.c(#q:s/#%(#b)s(*).c/'S${padanan[1]}.C'/)
mengambil pengembangan daripada *.c dan menggunakan kelayakan glob dalam (#q...) ungkapan,
yang terdiri daripada pengubah gantian yang berlabuh pada permulaan dan akhir setiap perkataan (#%).
Ini menghidupkan rujukan belakang ((#b)), supaya subungkapan dalam kurungan tersedia
dalam rentetan gantian sebagai ${match[1]}. Rentetan gantian dipetik supaya
parameter tidak digantikan sebelum permulaan penjanaan nama fail.
Berikut f, F, w and W pengubah suai berfungsi hanya dengan pengembangan parameter dan nama fail
generasi. Mereka disenaraikan di sini untuk menyediakan satu titik rujukan untuk semua
pengubah.
f Mengulangi serta-merta (tanpa titik bertindih) berikutan pengubah suai sehingga terhasil
perkataan tidak berubah lagi.
F:expr:
suka f, tetapi berulang sahaja n kali jika ungkapan expr menilai untuk n. Mana-mana
aksara boleh digunakan sebagai ganti `:'; jika `(', `[', atau `{' digunakan sebagai
pembatas pembukaan, pembatas penutup hendaklah ')', `]', atau `}', masing-masing.
w Menjadikan pengubah suai berikut berfungsi pada setiap perkataan dalam rentetan.
W:September: suka w tetapi perkataan dianggap sebagai bahagian rentetan yang dipisahkan oleh
September. Sebarang aksara boleh digunakan dan bukannya `:'; kurungan pembukaan dikendalikan
khususnya, lihat di atas.
PROSES PENGGANTIAN
Setiap bahagian hujah perintah yang berbentuk `<(senarai)', `>(senarai)' atau `=(senarai)'adalah
tertakluk kepada penggantian proses. Ungkapan itu mungkin didahului atau diikuti oleh yang lain
rentetan kecuali itu, untuk mengelakkan pertembungan dengan rentetan dan corak yang biasa berlaku, yang
borang terakhir mesti berlaku pada permulaan hujah arahan, dan borang hanya dikembangkan
apabila pertama kali menghuraikan perintah atau argumen tugasan. Penggantian proses boleh digunakan
berikut pengendali ubah hala; dalam kes ini, penggantian mesti muncul dengan no
rentetan mengekor.
Dalam kes < or > membentuk, shell menjalankan arahan masuk senarai sebagai subproses daripada
tugas melaksanakan baris arahan shell. Jika sistem menyokong /dev/fd mekanisme,
hujah arahan ialah nama fail peranti yang sepadan dengan deskriptor fail;
sebaliknya, jika sistem menyokong paip bernama (FIFO), hujah arahan akan menjadi a
bernama paip. Jika borang dengan > dipilih kemudian menulis pada fail khas ini akan menyediakan
input untuk senarai. Jika < digunakan, maka fail yang diluluskan sebagai hujah akan disambungkan kepada
keluaran daripada senarai proses. Sebagai contoh,
tampal <(potong -f1 file1) <(potong -f3 file2) |
tee >(proses1) >(proses2) > / dev / null
memotong medan 1 dan 3 daripada fail file1 and file2 masing-masing, tampalkan hasilnya
bersama-sama, dan menghantarnya ke proses proses1 and proses2.
If =(...) digunakan dan bukannya <(...), maka fail yang diluluskan sebagai argumen akan menjadi nama
daripada fail sementara yang mengandungi output senarai proses. Ini boleh digunakan sebaliknya
daripada < borang untuk program yang menjangka untuk mencari (lihat mencari(2)) pada fail input.
Terdapat pengoptimuman untuk penggantian borang =(<<berhujah), Di mana berhujah ialah
hujah perkataan tunggal kepada pengalihan rentetan di sini <<. Borang ini menghasilkan nama fail
yang mengandungi nilai berhujah selepas sebarang penggantian dilakukan. Ini dikendalikan
sepenuhnya dalam shell semasa. Ini secara berkesan adalah kebalikan daripada bentuk khas
$(berhujah) yang merawat berhujah sebagai nama fail dan menggantikannya dengan kandungan fail.
. = borang berguna kerana kedua-duanya /dev/fd dan pelaksanaan paip yang dinamakan <(...) mempunyai
kelemahan. Dalam kes terdahulu, sesetengah program mungkin menutup fail secara automatik
deskriptor yang dipersoalkan sebelum memeriksa fail pada baris arahan, terutamanya jika ini
adalah perlu atas sebab keselamatan seperti semasa program sedang berjalan setuid. Di dalam
kes kedua, jika program tidak benar-benar membuka fail, subkulit cuba untuk
baca dari atau tulis ke paip akan (dalam pelaksanaan biasa, operasi yang berbeza
sistem mungkin mempunyai kelakuan yang berbeza) menyekat selama-lamanya dan perlu dibunuh secara eksplisit. Dalam
kedua-dua kes, shell sebenarnya membekalkan maklumat menggunakan paip, supaya program
yang mengharapkan untuk mencari (lihat mencari(2)) pada fail tidak akan berfungsi.
Juga ambil perhatian bahawa contoh sebelumnya boleh ditulis dengan lebih padat dan cekap
(dengan syarat MULTIOS pilihan ditetapkan) sebagai:
tampal <(potong -f1 file1) <(potong -f3 file2) \
> >(proses1) > >(proses2)
Cangkang menggunakan paip dan bukannya FIFO untuk melaksanakan dua penggantian proses terakhir dalam
contoh di atas.
Terdapat masalah tambahan dengan >(proses); apabila ini dilampirkan pada luaran
perintah, shell induk tidak menunggu proses untuk menyelesaikan dan dengan itu segera
arahan berikut tidak boleh bergantung pada keputusan yang lengkap. Masalah dan penyelesaiannya ialah
sama seperti yang diterangkan dalam bahagian MULTIOS in zshmisc(1). Oleh itu dalam versi yang dipermudahkan
daripada contoh di atas:
tampal <(potong -f1 file1) <(potong -f3 file2) > >(proses)
(perhatikan bahawa tidak MULTIOS terlibat), proses akan dijalankan secara tidak segerak sejauh
shell induk prihatin. Penyelesaiannya ialah:
{ tampal <(potong -f1 file1) <(potong -f3 file2) } > >(proses)
Proses tambahan di sini dihasilkan daripada shell induk yang akan menunggu untuk mereka
selesai.
Masalah lain timbul bila-bila masa kerja dengan penggantian yang memerlukan fail sementara
adalah dinafikan oleh shell, termasuk kes di mana `&!' atau `&|' muncul pada akhir a
perintah yang mengandungi penggantian. Dalam kes itu, fail sementara tidak akan dibersihkan
kerana cangkerang tidak lagi mempunyai sebarang ingatan tentang pekerjaan itu. Penyelesaian adalah dengan menggunakan subkulit, untuk
contohnya,
(mycmd =(output saya)) &!
kerana subkulit bercabang akan menunggu arahan selesai kemudian keluarkan fail sementara.
Penyelesaian umum untuk memastikan penggantian proses bertahan untuk tempoh yang sesuai
masa adalah untuk menghantarnya sebagai parameter kepada fungsi shell tanpa nama (sekeping kod shell
yang dijalankan serta-merta dengan skop fungsi). Sebagai contoh, kod ini:
() {
cetak File $ 1:
kucing $1
} =(cetak ini be yang ayat)
mengeluarkan sesuatu yang menyerupai berikut
File /tmp/zsh6nU0kS:
ini be yang ayat
Fail sementara yang dicipta oleh penggantian proses akan dipadamkan apabila fungsi
jalan keluar.
PARAMETER EXPANSION
Watak `$' digunakan untuk memperkenalkan pengembangan parameter. Lihat zshparam(1) untuk a
perihalan parameter, termasuk tatasusunan, tatasusunan bersekutu dan tatatanda subskrip kepada
akses elemen tatasusunan individu.
Perhatikan khususnya fakta bahawa perkataan parameter yang tidak disebut tidak dipecah secara automatik
pada ruang putih melainkan pilihan SH_WORD_SPLIT ditetapkan; lihat rujukan kepada pilihan ini di bawah
untuk maklumat lanjut. Ini adalah perbezaan penting daripada cengkerang lain.
Dalam pengembangan yang dibincangkan di bawah yang memerlukan corak, bentuk corak ialah
sama seperti yang digunakan untuk penjanaan nama fail; lihat bahagian `Penjanaan Nama Fail'. Catatan
bahawa corak ini, bersama-sama dengan teks gantian sebarang penggantian, adalah diri mereka sendiri
tertakluk kepada pengembangan parameter, penggantian arahan dan pengembangan aritmetik. Dalam
sebagai tambahan kepada operasi berikut, pengubah suai kolon yang diterangkan dalam bahagian
`Pengubahsuai' dalam bahagian `Peluasan Sejarah' boleh digunakan: contohnya,
${i:s/foo/bar/} melakukan penggantian rentetan pada pengembangan parameter $i.
${nama}
Nilai, jika ada, parameter nama digantikan. Pendakap gigi diperlukan
jika pengembangan akan diikuti dengan huruf, digit atau garis bawah yang bukan untuk
ditafsirkan sebagai sebahagian daripada nama. Di samping itu, bentuk yang lebih rumit
penggantian biasanya memerlukan pendakap untuk hadir; pengecualian, yang hanya terpakai
jika pilihan KSH_ARRAYS tidak ditetapkan, merupakan subskrip tunggal atau mana-mana pengubah suai bertindih
muncul selepas nama, atau mana-mana watak `^', `=', `~', `#' atau `+'
muncul sebelum nama, semuanya berfungsi dengan atau tanpa pendakap.
If nama ialah parameter tatasusunan, dan KSH_ARRAYS pilihan tidak ditetapkan, maka nilai
setiap elemen daripada nama digantikan, satu unsur bagi setiap perkataan. Jika tidak, yang
pengembangan menghasilkan satu perkataan sahaja; dengan KSH_ARRAYS, ini adalah elemen pertama
tatasusunan. Tiada pemisahan medan dilakukan pada keputusan melainkan jika SH_WORD_SPLIT pilihan
ditetapkan. Lihat juga bendera = and s:rentetan:.
${+nama}
If nama ialah nama set parameter `1' digantikan, jika tidak `0'adalah
digantikan.
${nama-perkataan}
${nama:-perkataan}
If nama ditetapkan, atau dalam bentuk kedua adalah bukan nol, kemudian gantikan nilainya;
sebaliknya menggantikan perkataan. Dalam bentuk kedua nama boleh ditinggalkan, dalam hal ini
perkataan sentiasa diganti.
${nama+perkataan}
${nama:+perkataan}
If nama ditetapkan, atau dalam bentuk kedua adalah bukan nol, kemudian gantikan perkataan; sebaliknya
menggantikan apa-apa.
${nama=perkataan}
${nama:=perkataan}
${nama::=perkataan}
Dalam bentuk pertama, jika nama tidak ditetapkan kemudian tetapkannya kepada perkataan; dalam bentuk kedua, jika
nama tidak ditetapkan atau batal kemudian tetapkannya kepada perkataan; dan dalam bentuk ketiga, tanpa syarat
menetapkan nama kepada perkataan. Dalam semua bentuk, nilai parameter kemudiannya digantikan.
${nama?perkataan}
${nama:?perkataan}
Dalam bentuk pertama, jika nama ditetapkan, atau dalam bentuk kedua jika nama kedua-duanya ditetapkan dan
bukan nol, kemudian gantikan nilainya; jika tidak, cetak perkataan dan keluar dari cangkerang.
Cangkang interaktif sebaliknya kembali ke gesaan. Jika perkataan ditinggalkan, maka a
mesej standard dicetak.
Dalam mana-mana ungkapan di atas yang menguji pembolehubah dan menggantikan ganti perkataan,
ambil perhatian bahawa anda boleh menggunakan petikan shell standard dalam perkataan nilai untuk mengatasi secara selektif
pemisahan dilakukan oleh SH_WORD_SPLIT pilihan dan = bendera, tetapi tidak dibelah oleh
s:rentetan: bendera.
Dalam ungkapan berikut, apabila nama ialah tatasusunan dan penggantian tidak disebut, atau
sekiranya `(@)' bendera atau nama[@] sintaks digunakan, pemadanan dan penggantian dilakukan pada
setiap elemen tatasusunan secara berasingan.
${nama#pola}
${nama##pola}
Jika pola sepadan dengan permulaan nilai nama, kemudian gantikan dengan
nilai nama dengan bahagian yang dipadankan dipadamkan; jika tidak, gantikan sahaja
nilai nama. Dalam bentuk pertama, corak padanan terkecil diutamakan; dalam
bentuk kedua, corak padanan terbesar lebih diutamakan.
${nama%pola}
${nama%%pola}
Jika pola sepadan dengan penghujung nilai nama, kemudian gantikan nilai bagi
nama dengan bahagian yang dipadankan dipadamkan; jika tidak, gantikan sahaja nilai
nama. Dalam bentuk pertama, corak padanan terkecil diutamakan; dalam yang kedua
bentuk, corak padanan terbesar lebih diutamakan.
${nama:#pola}
Jika pola sepadan dengan nilai nama, kemudian gantikan rentetan kosong;
jika tidak, gantikan sahaja nilai nama. Jika nama ialah tatasusunan yang sepadan
elemen tatasusunan dialih keluar (gunakan `(M)' bendera untuk mengalih keluar elemen yang tidak sepadan).
${nama:|nama tatasusunan}
If nama tatasusunan ialah nama (NB, bukan kandungan) pembolehubah tatasusunan, kemudian mana-mana
unsur yang terkandung dalam nama tatasusunan dikeluarkan daripada penggantian nama. Jika
penggantian adalah skalar, sama ada kerana nama ialah pembolehubah skalar atau ungkapan
dipetik, unsur-unsur nama tatasusunan sebaliknya diuji terhadap keseluruhannya
ungkapan.
${nama:*nama tatasusunan}
Sama seperti penggantian sebelumnya, tetapi dalam erti kata yang bertentangan, supaya entri
hadir dalam kedua-dua penggantian asal dan sebagai unsur nama tatasusunan dikekalkan
dan lain-lain dikeluarkan.
${nama:^nama tatasusunan}
${nama:^^nama tatasusunan}
Zip dua tatasusunan, supaya tatasusunan output adalah dua kali lebih panjang daripada yang terpendek
(paling lama untuk `:^^') daripada nama and nama tatasusunan, dengan unsur-unsur berselang-seli menjadi
dipetik daripada mereka. Untuk `:^', jika salah satu tatasusunan input lebih panjang, output akan
berhenti apabila penghujung tatasusunan yang lebih pendek dicapai. Oleh itu,
a=(1 2 3 4); b=(a b); cetak ${a:^b}
akan mengeluarkan `1 a 2 b'. Untuk `:^^', maka input diulang sehingga semua
tatasusunan yang lebih panjang telah digunakan dan di atas akan mengeluarkan `1 a 2 b 3 a 4 b'.
Sama ada atau kedua-dua input mungkin skalar, ia akan dianggap sebagai tatasusunan panjang 1
dengan skalar sebagai satu-satunya elemen. Jika mana-mana tatasusunan kosong, tatasusunan yang lain adalah
output tanpa elemen tambahan dimasukkan.
Pada masa ini kod berikut akan mengeluarkan `a b' dan `1' sebagai dua elemen yang berasingan,
yang boleh di luar jangkaan. Cetakan kedua menyediakan penyelesaian yang sepatutnya
teruskan bekerja jika ini diubah.
a=(a b); b=(1 2); cetak -l "${a:^b}"; cetak -l "${${a:^b}}"
${nama:mengimbangi}
${nama:mengimbangi:panjang}
Sintaks ini memberikan kesan yang serupa dengan melanggan parameter dalam borang
$nama[permulaan,akhir], tetapi serasi dengan cangkerang lain; ambil perhatian bahawa kedua-duanya mengimbangi and
panjang ditafsirkan secara berbeza daripada komponen subskrip.
If mengimbangi adalah bukan negatif, maka jika pembolehubah nama ialah pengganti skalar yang
kandungan bermula mengimbangi aksara daripada aksara pertama rentetan, dan jika
nama ialah elemen pengganti tatasusunan bermula mengimbangi elemen dari yang pertama
unsur. Jika panjang diberikan, gantikan bahawa banyak watak atau unsur,
sebaliknya seluruh skalar atau tatasusunan yang lain.
Positif mengimbangi sentiasa dianggap sebagai offset watak atau elemen dalam nama
daripada aksara atau elemen pertama tatasusunan (ini berbeza daripada zsh asli
notasi subskrip). Oleh itu 0 merujuk kepada aksara atau elemen pertama tanpa mengira
daripada tetapan pilihan KSH_ARRAYS.
Offset negatif dikira ke belakang dari penghujung skalar atau tatasusunan, supaya -1
sepadan dengan watak atau elemen terakhir, dan seterusnya.
Apabila positif, panjang dikira daripada mengimbangi kedudukan ke arah hujung skalar
atau tatasusunan. Apabila negatif, panjang mengira kembali dari akhir. Jika ini mengakibatkan a
kedudukan lebih kecil daripada mengimbangi, diagnostik dicetak dan tiada apa-apa yang digantikan.
pilihan MULTIBYTE dipatuhi, iaitu pengimbangan dan kiraan panjang berbilangbait
watak yang sesuai.
mengimbangi and panjang menjalani set penggantian cangkerang yang sama seperti skalar
tugasan; sebagai tambahan, mereka kemudiannya tertakluk kepada penilaian aritmetik. Oleh itu,
contohnya
cetak ${foo:3}
cetak ${foo: 1 + 2}
cetak ${foo:$(( 1 + 2))}
cetak ${foo:$(echo 1 + 2)}
semuanya mempunyai kesan yang sama, mengekstrak rentetan bermula pada aksara keempat
$foo jika penggantian sebaliknya akan mengembalikan skalar, atau tatasusunan bermula pada
unsur keempat jika $foo akan mengembalikan tatasusunan. Perhatikan bahawa dengan pilihan
KSH_ARRAYS $foo sentiasa mengembalikan skalar (tanpa mengira penggunaan offset
sintaks) dan bentuk seperti $foo[*]:3 diperlukan untuk mengekstrak elemen tatasusunan
bernama foo.
If mengimbangi adalah negatif, iaitu - mungkin tidak muncul serta-merta selepas : seperti ini
menunjukkan ${nama:-perkataan} bentuk penggantian. Sebaliknya, ruang boleh dimasukkan
sebelum -. Tambahan pula, tidak juga mengimbangi tidak panjang boleh bermula dengan abjad
watak atau & kerana ini digunakan untuk menunjukkan pengubah gaya sejarah. Kepada
menggantikan nilai daripada pembolehubah, pendekatan yang disyorkan adalah mendahuluinya dengan
a $ kerana ini menandakan niat (penggantian parameter boleh diberikan dengan mudah
tidak boleh dibaca); bagaimanapun, semasa penggantian aritmetik dilakukan, ungkapan
${var: off} berfungsi, mendapatkan semula offset daripada $offs.
Untuk keserasian lanjut dengan cengkerang lain terdapat kes khas untuk tatasusunan
offset 0. Ini biasanya mengakses kepada elemen pertama tatasusunan. Namun, jika
penggantian merujuk tatasusunan parameter kedudukan, cth $@ or $*, kemudian mengimbangi
0 sebaliknya merujuk kepada $0, mengimbangi 1 merujuk kepada $1, dan sebagainya. Dalam erti kata lain,
tatasusunan parameter kedudukan dilanjutkan dengan berkesan dengan menambah $0. Oleh itu
${*:0:1} pengganti $0 and ${*:1:1} pengganti $1.
${nama/pola/pengganti}
${nama//pola/pengganti}
Gantikan padanan terpanjang yang mungkin pola dalam pengembangan parameter nama by
rentetan pengganti. Bentuk pertama menggantikan hanya kejadian pertama, bentuk kedua
semua kejadian. Kedua-duanya pola and pengganti tertakluk kepada penggantian sebut harga dua kali,
supaya ungkapan seperti ${name/$opat/$npat} akan berfungsi, tetapi perhatikan peraturan biasa
watak corak dalam $opat tidak dilayan secara khusus melainkan salah satu pilihan
GLOB_SUBST ditetapkan, atau $opat sebaliknya digantikan sebagai ${~opat}.
. pola boleh bermula dengan `#', dalam hal ini pola mesti sepadan pada permulaan
daripada rentetan, atau `%', dalam hal ini ia mesti sepadan pada penghujung rentetan, atau
`#%' dalam hal ini pola mesti sepadan dengan keseluruhan rentetan. The pengganti mungkin menjadi
rentetan kosong, dalam hal ini `/' juga boleh ditinggalkan. Untuk memetik perlawanan akhir
`/' dalam kes lain ia harus didahului dengan satu garis serong ke belakang; Ini bukan
perlu sekiranya `/' berlaku di dalam parameter yang diganti. Perhatikan juga bahawa
`#', `%' dan `#% tidak aktif jika ia berlaku di dalam parameter yang digantikan, walaupun
pada permulaannya.
Yang pertama `/' boleh didahului dengan `:', dalam hal ini perlawanan hanya akan berjaya
jika ia sepadan dengan keseluruhan perkataan. Perhatikan juga kesan daripada I and S parameter
bendera pengembangan di bawah; bagaimanapun, bendera M, R, B, E and N tidak berguna.
Sebagai contoh,
foo="kelip kekerlapan sedikit bintang" sub="t*e" rep="spy"
cetak ${foo//${~sub}/$rep}
cetak ${(S)foo//${~sub}/$rep}
Di sini, `~' memastikan bahawa teks daripada $sub dianggap sebagai corak dan bukannya a
rentetan biasa. Dalam kes pertama, perlawanan paling lama untuk t*e digantikan dan
hasilnya ialah `pengintip bintang', manakala dalam kes kedua, perlawanan terpendek diambil dan
hasilnya ialah `pengintip pengintip licin bintang'.
${#spec}
If spec ialah salah satu daripada penggantian di atas, gantikan panjang dalam aksara bagi
hasilnya bukannya hasil itu sendiri. Jika spec ialah ungkapan tatasusunan,
gantikan bilangan elemen hasil. Ini mempunyai kesan sampingan yang
penyertaan dilangkau walaupun dalam bentuk petikan, yang boleh menjejaskan subungkapan lain dalam
spec. Perhatikan bahawa `^', `=', dan `~', di bawah, mesti muncul di sebelah kiri `#' bila
borang-borang ini digabungkan.
Jika pilihan POSIX_IDENTIFIERS tidak ditetapkan, dan spec ialah nama yang mudah, kemudian
pendakap adalah pilihan; ini benar walaupun untuk parameter khas, contohnya $#- and $#*
ambil panjang tali $- dan tatasusunan $* masing-masing. Jika
POSIX_IDENTIFIERS ditetapkan, maka pendakap diperlukan untuk # untuk dirawat dalam hal ini
fesyen.
${^spec}
Hidupkan RC_EXPAND_PARAM pilihan untuk penilaian spec; jika `^'adalah
dua kali ganda, matikan. Apabila pilihan ini ditetapkan, pengembangan tatasusunan borang
foo${xx}bar, di mana parameter xx ditetapkan untuk (a b c), digantikan dengan
`fooabar foobbar foocbar' bukannya lalai `fooa b cbar'. Perhatikan bahawa kosong
array oleh itu akan menyebabkan semua hujah dialih keluar.
Secara dalaman, setiap pengembangan tersebut ditukar kepada senarai yang setara untuk pendakap
pengembangan. Cth, ${^var} menjadi {$var[1],$var[2],...}, dan diproses sebagai
diterangkan dalam bahagian `Peluasan Pendakap' di bawah. Jika pemisahan perkataan juga masuk
kesan yang $var[N] mungkin sendiri dibahagikan kepada elemen senarai yang berbeza.
${=spec}
Lakukan pembahagian perkataan menggunakan peraturan untuk SH_WORD_SPLIT semasa penilaian
spec, tetapi tidak kira sama ada parameter muncul dalam petikan berganda; jika `='
digandakan, matikan. Ini memaksa pengembangan parameter dibahagikan kepada
pisahkan perkataan sebelum penggantian, menggunakan IFS sebagai pembatas. Ini dilakukan oleh
lalai dalam kebanyakan cengkerang lain.
Ambil perhatian bahawa pemisahan digunakan untuk perkataan dalam bentuk tugasan spec sebelum yang
tugasan kepada nama dilaksanakan. Ini menjejaskan hasil tugasan tatasusunan dengan
yang A bendera.
${~spec}
Hidupkan GLOB_SUBST pilihan untuk penilaian spec; jika `~' digandakan,
tutupkan. Apabila pilihan ini ditetapkan, rentetan yang terhasil daripada pengembangan akan
ditafsirkan sebagai corak di mana sahaja yang mungkin, seperti dalam nama fail
pengembangan dan penjanaan nama fail dan konteks padanan corak seperti tangan kanan
sebelah `=' dan `!=' operator dalam keadaan.
Dalam penggantian bersarang, ambil perhatian bahawa kesan daripada ~ terpakai kepada hasil daripada
tahap penggantian semasa. Operasi corak sekeliling pada hasilnya mungkin
membatalkannya. Oleh itu, sebagai contoh, jika parameter foo ditetapkan untuk *, ${~foo//\*/*.c}
digantikan dengan corak *.c, yang boleh dikembangkan dengan penjanaan nama fail,
tetapi ${${~foo}//\*/*.c} pengganti kepada rentetan *.c, yang tidak akan lebih jauh
diperluaskan.
Jika ${...} taip ungkapan parameter atau a $(...) jenis penggantian arahan digunakan dalam
tempat nama di atas, ia dikembangkan terlebih dahulu dan hasilnya digunakan seolah-olah ia adalah nilai
of nama. Oleh itu adalah mungkin untuk melakukan operasi bersarang: ${${foo#head}%tail}
menggantikan nilai $foo dengan kedua-duanya `kepala' dan `ekor' dipadamkan. Borang dengan $(...)
selalunya berguna dalam kombinasi dengan bendera yang diterangkan seterusnya; lihat contoh di bawah.
setiap nama atau bersarang ${...} dalam pengembangan parameter juga boleh diikuti dengan subskrip
ungkapan seperti yang diterangkan dalam Array Parameter in zshparam(1).
Ambil perhatian bahawa petikan berganda mungkin muncul di sekitar ungkapan bersarang, dalam hal ini hanya bahagian
bahagian dalam dianggap seperti yang dipetik; sebagai contoh, ${(f)"$(foo)"} memetik hasil daripada $(foo), Tetapi
bendera `(F)' (lihat di bawah) digunakan menggunakan peraturan untuk pengembangan tidak disebut harga. Catatan
selanjutnya bahawa petikan itu sendiri bersarang dalam konteks ini; contohnya, dalam
"${(@f)"$(foo)"}", terdapat dua set petikan, satu mengelilingi keseluruhan ungkapan, iaitu
lain (berlebihan) yang mengelilingi $(foo) seperti dahulu.
Parameter pengembangan Flags
Jika pendakap pembukaan diikuti terus oleh kurungan pembukaan, rentetan sehingga ke
kurungan penutup yang sepadan akan diambil sebagai senarai bendera. Dalam kes di mana mengulangi a
bendera bermakna, ulangan tidak perlu berturut-turut; contohnya, `(q%q%q)' bermaksud
perkara yang sama seperti yang lebih boleh dibaca `(%%qqq)'. Bendera berikut disokong:
# Nilaikan perkataan yang terhasil sebagai ungkapan angka dan keluarkan aksara
sepadan dengan integer yang terhasil. Ambil perhatian bahawa borang ini berbeza sepenuhnya
daripada penggunaan # tanpa kurungan.
Jika MULTIBYTE pilihan ditetapkan dan bilangannya lebih besar daripada 127 (iaitu bukan an
aksara ASCII) ia dianggap sebagai aksara Unicode.
% Buka semua % melarikan diri dalam perkataan yang terhasil dengan cara yang sama seperti dalam gesaan (lihat
PERLUASAN URUTAN CEPAT dalam zshmisc(1)). Jika bendera ini diberikan dua kali, penuh
pengembangan segera dilakukan pada perkataan yang terhasil, bergantung pada tetapan
PROMPT_PERCENT, PROMPT_SUBST and PROMPT_BANG pilihan.
@ Dalam petikan berganda, elemen tatasusunan dimasukkan ke dalam perkataan yang berasingan. Cth, `"${(@)foo}"'
adalah bersamaan dengan `"${foo[@]}"' dan `"${(@)foo[1,2]}"' adalah sama dengan `"$foo[1]"
"$foo[2]"'. Ini berbeza daripada bidang membelah oleh f, s or z bendera, yang
masih terpakai dalam setiap elemen tatasusunan.
A Buat parameter tatasusunan dengan `${...=...}', `${...:=...}' atau `${...::=...}'. Jika
bendera ini diulang (seperti dalam `AA'), buat parameter tatasusunan bersekutu.
Tugasan dibuat sebelum menyusun atau mengalas; jika pemisahan medan aktif,
perkataan bahagian dibahagi sebelum tugasan. The nama sebahagian mungkin julat berlangganan untuk
tatasusunan biasa; yang perkataan sebahagian kemestian ditukar kepada tatasusunan, contohnya dengan menggunakan
`${(AA)=nama=...}' untuk mengaktifkan pemisahan medan, apabila mencipta tatasusunan bersekutu.
a Isih dalam susunan indeks tatasusunan; apabila digabungkan dengan `O' susun dalam indeks tatasusunan terbalik
pesanan. Perhatikan bahawa `a' oleh itu adalah bersamaan dengan lalai tetapi `Oa' berguna untuk
mendapatkan elemen tatasusunan dalam susunan terbalik.
b Petikan dengan garis miring ke belakang hanya aksara yang khas untuk padanan corak. ini
berguna apabila kandungan pembolehubah akan diuji menggunakan GLOB_SUBST,
termasuk ${~...} suis.
Memetik menggunakan salah satu daripada q keluarga bendera tidak berfungsi untuk tujuan ini sejak itu
petikan tidak dilucutkan daripada aksara bukan corak oleh GLOB_SUBST. Dalam kata lain,
corak=${(q)str}
[[ $ str = ${~corak} ]]
berfungsi jika $ str ialah `a*b' tetapi tidak jika ia adalah `a b', sedangkan
corak=${(b)str}
[[ $ str = ${~corak} ]]
sentiasa benar untuk sebarang nilai yang mungkin bagi $ str.
c Dengan ${#nama}, kira jumlah bilangan aksara dalam tatasusunan, seolah-olah elemen
telah digabungkan dengan ruang di antara mereka. Ini bukan gabungan sebenar tatasusunan,
jadi ungkapan lain yang digunakan dengan bendera ini mungkin mempunyai kesan pada unsur-unsur
tatasusunan sebelum dikira.
C Gunakan huruf besar pada perkataan yang terhasil. `Perkataan' dalam kes ini merujuk kepada urutan
aksara abjad angka dipisahkan oleh bukan abjad angka, tidak kepada perkataan yang terhasil
daripada pembahagian padang.
D Andaikan rentetan atau elemen tatasusunan mengandungi direktori dan cuba menggantikannya
bahagian terkemuka ini dengan nama. Baki laluan (keseluruhannya jika
bahagian utama tidak diganti) kemudiannya dipetik supaya keseluruhan rentetan boleh
digunakan sebagai hujah shell. Ini adalah kebalikan daripada `~' penggantian: lihat
bahagian PENGEMBANGAN NAMA FAIL di bawah.
e Melaksanakan parameter pengembangan, arahan penggantian and aritmetik pengembangan pada
hasil. Pengembangan sedemikian boleh bersarang tetapi rekursi yang terlalu dalam mungkin tidak dapat diramalkan
kesan.
f Pisahkan hasil pengembangan pada baris baharu. Ini adalah singkatan untuk `ps:\n:'.
F Gabungkan perkataan tatasusunan bersama-sama menggunakan baris baharu sebagai pemisah. Ini adalah
singkatan untuk `pj:\n:'.
g:memilih:
Proses urutan pelarian seperti gema terbina apabila tiada pilihan diberikan (g::).
Dengan o pilihan, pelarian perlapanan tidak mengambil sifar pendahuluan. Dengan c pilihan,
urutan seperti `^X' juga diproses. Dengan e pilihan, proses `\Mt'dan
urutan serupa seperti cetakan terbina. Dengan kedua-duanya o and e pilihan,
berkelakuan seperti cetakan terbina dalam kecuali dalam mod ini tiada `\c'
ditafsirkan.
i Isih secara tidak sensitif huruf besar-besaran. Boleh digabungkan dengan `n' atau `O'.
k If nama merujuk kepada tatasusunan bersekutu, gantikan kunci (nama unsur) sebaliknya
daripada nilai unsur. Digunakan dengan subskrip (termasuk tatasusunan biasa),
memaksa indeks atau kunci diganti walaupun borang subskrip merujuk kepada
nilai. Walau bagaimanapun, bendera ini tidak boleh digabungkan dengan julat subskrip.
L Tukar semua huruf dalam keputusan kepada huruf kecil.
n Isih integer perpuluhan secara berangka; jika aksara pertama yang berbeza daripada dua ujian
rentetan bukan digit, pengisihan adalah leksikal. Integer dengan lebih banyak sifar awal ialah
diisih sebelum yang kurang atau tiada. Oleh itu tatasusunan `foo1 foo02 foo2 foo3
foo20 foo23' diisih mengikut susunan yang ditunjukkan. Boleh digabungkan dengan `i' atau `O'.
o Isih perkataan yang terhasil dalam susunan menaik; jika ini muncul dengan sendiri pengisihan
adalah leksikal dan sensitif huruf besar-besaran (melainkan tempat itu menjadikannya tidak sensitif huruf besar-besaran).
Isih dalam tertib menaik ialah lalai untuk bentuk pengisihan lain, jadi ini
diabaikan jika digabungkan dengan `a', `i' atau `n'.
O Isih perkataan yang terhasil dalam susunan menurun; `O' tanpa `a', `i' atau `n' macam masuk
susunan leksikal terbalik. Boleh digabungkan dengan `a', `i' atau `n' untuk membalikkan perintah itu
daripada menyusun.
P Ini memaksa nilai parameter nama untuk ditafsirkan sebagai lebih lanjut
nama parameter, yang nilainya akan digunakan di mana sesuai. Perhatikan bahawa bendera ditetapkan
dengan salah satu daripada set taip keluarga perintah (dalam kes tertentu transformasi) adalah
tidak digunakan pada nilai nama digunakan dengan cara ini.
Jika digunakan dengan parameter bersarang atau penggantian arahan, hasilnya akan menjadi
diambil sebagai nama parameter dengan cara yang sama. Sebagai contoh, jika anda mempunyai `foo=bar'dan
`bar=baz', rentetan ${(P)foo}, ${(P)${foo}}, dan ${(P)$(gema bar)} akan
diperluaskan kepada `asas'.
q Petikan aksara yang istimewa kepada cangkang dalam perkataan yang terhasil dengan
garis miring ke belakang; aksara yang tidak boleh dicetak atau tidak sah dipetik menggunakan $'\Nnn' bentuk,
dengan petikan berasingan untuk setiap oktet.
Jika bendera ini diberikan dua kali, perkataan yang terhasil dipetik dalam petikan tunggal dan jika
ia diberikan tiga kali, perkataan itu dipetik dalam petikan berganda; dalam borang ini no
pengendalian khas bagi aksara yang tidak boleh dicetak atau tidak sah cuba. Jika bendera itu
diberi empat kali, perkataan tersebut dipetik dalam petikan tunggal didahului dengan a $. Perhatikan bahawa
dalam ketiga-tiga bentuk ini, petikan dilakukan tanpa syarat, walaupun ini tidak
ubah cara rentetan yang dihasilkan akan ditafsirkan oleh shell.
Jika q- diberikan (hanya satu q mungkin muncul), satu bentuk petikan tunggal yang minimum ialah
digunakan yang hanya memetik rentetan jika diperlukan untuk melindungi aksara khas.
Biasanya borang ini memberikan output yang paling boleh dibaca.
Q Alih keluar satu peringkat petikan daripada perkataan yang terhasil.
t Gunakan rentetan yang menerangkan jenis parameter di mana nilai parameter
biasanya akan muncul. Rentetan ini terdiri daripada kata kunci yang dipisahkan oleh tanda sempang (`-').
Kata kunci pertama dalam rentetan menerangkan jenis utama, ia boleh menjadi salah satu daripada `skalar',
`pelbagai', `integer', `terapung' atau `persatuan'. Kata kunci lain menerangkan jenis
lebih terperinci:
tempatan untuk parameter tempatan
kiri untuk parameter dibenarkan kiri
kanan_kosong
untuk parameter wajar yang betul dengan kosong di hadapan
right_zeros
untuk parameter wajar yang betul dengan sifar pendahuluan
yang lebih rendah untuk parameter yang nilainya ditukar kepada semua huruf kecil apabila ianya
berkembang
atas untuk parameter yang nilainya ditukar kepada semua huruf besar apabila ia
berkembang
baca sahaja
untuk parameter baca sahaja
tag untuk parameter yang ditag
mengeksport untuk parameter yang dieksport
unik untuk tatasusunan yang menyimpan hanya kejadian pertama nilai pendua
menyembunyikan untuk parameter dengan bendera `hide'
tempat persembunyian
untuk parameter dengan bendera `hideval'
khas
untuk parameter khas yang ditakrifkan oleh shell
u Kembangkan hanya kejadian pertama bagi setiap perkataan unik.
U Tukar semua huruf dalam keputusan kepada huruf besar.
v Digunakan dengan k, gantikan (sebagai dua perkataan berturut-turut) kedua-dua kunci dan nilai
setiap elemen tatasusunan bersekutu. Digunakan dengan subskrip, nilai paksa menjadi
digantikan walaupun borang subskrip merujuk kepada indeks atau kunci.
V Jadikan sebarang aksara khas dalam perkataan yang terhasil kelihatan.
w Dengan ${#nama}, mengira perkataan dalam tatasusunan atau rentetan; yang s bendera boleh digunakan untuk menetapkan a
pembatas perkataan.
W Sama seperti w dengan perbezaan bahawa perkataan kosong antara pembatas berulang adalah
juga dikira.
X Dengan bendera ini, ralat penghuraian berlaku dengan Q, e and # bendera atau corak
bentuk padanan seperti `${nama#pola}' dilaporkan. Tanpa bendera, kesilapan
diabaikan secara senyap.
z Pisahkan hasil pengembangan kepada perkataan menggunakan parsing shell untuk mencari perkataan,
iaitu mengambil kira sebarang sebut harga dalam nilai. Komen tidak dilayan
khas tetapi sebagai rentetan biasa, serupa dengan cengkerang interaktif dengan
INTERACTIVE_COMMENTS pilihan tidak ditetapkan (bagaimanapun, lihat Z bendera di bawah untuk berkaitan
pilihan)
Ambil perhatian bahawa ini dilakukan sangat lewat, walaupun lewat daripada `(S)' bendera. Jadi untuk mengakses
perkataan tunggal dalam hasilnya menggunakan pengembangan bersarang seperti dalam `${${(z)foo}[2]}'. Begitu juga,
untuk mengeluarkan petikan dalam perkataan yang terhasil gunakan `${(Q)${(z)foo}}'.
0 Pisahkan hasil pengembangan pada bait nol. Ini adalah singkatan untuk `ps:\0:'.
Bendera berikut (kecuali p) diikuti oleh satu atau lebih hujah seperti yang ditunjukkan. mana-mana
aksara, atau pasangan yang sepadan `(...)', `{...}', `[...]', atau `<...>', boleh digunakan dalam
tempat titik bertindih sebagai pembatas, tetapi ambil perhatian bahawa apabila bendera mengambil lebih daripada satu hujah, a
pasangan pembatas yang dipadankan mesti mengelilingi setiap hujah.
p Kenali urutan pelarian yang sama seperti cetak terbina dalam hujah rentetan kepada mana-mana
daripada bendera yang diterangkan di bawah yang mengikuti hujah ini.
Sebagai alternatif, dengan pilihan ini argumen rentetan mungkin dalam bentuk $var di mana
kes nilai pembolehubah diganti. Perhatikan borang ini adalah ketat; yang
hujah rentetan tidak mengalami pengembangan parameter umum.
Sebagai contoh,
sep=:
val=a:b:c
cetak ${(ps.$sep.)val}
membahagikan pembolehubah pada a :.
~ Rentetan yang dimasukkan ke dalam pengembangan oleh mana-mana bendera di bawah hendaklah dianggap sebagai
corak. Ini terpakai pada hujah rentetan bendera yang mengikuti ~ dalam
set kurungan yang sama. Berbanding dengan ~ kurungan luar, yang memaksa
keseluruhan rentetan yang digantikan untuk dianggap sebagai corak. Oleh itu, sebagai contoh,
[[ "?" = ${(~j.|.)array} ]]
merawat `|' sebagai corak dan berjaya jika dan hanya jika $array mengandungi rentetan `?'
sebagai unsur. The ~ boleh diulang untuk menogol tingkah laku; kesannya sahaja
berlangsung hingga akhir kumpulan kurungan.
j:rentetan:
Gabungkan perkataan tatasusunan bersama-sama menggunakan rentetan sebagai pemisah. Perhatikan bahawa ini
berlaku sebelum pemisahan medan oleh s:rentetan: bendera atau SH_WORD_SPLIT pilihan.
l:expr::string1::string2:
Pad perkataan yang terhasil di sebelah kiri. Setiap perkataan akan dipotong jika diperlukan dan
diletakkan di sebuah padang expr aksara lebar.
Hujah-hujah :string1: and :string2: adalah pilihan; tidak, yang pertama, atau kedua-duanya boleh
diberikan. Ambil perhatian bahawa pasangan pembatas yang sama mesti digunakan untuk setiap
tiga hujah. Ruang di sebelah kiri akan diisi dengan string1 (bercantum
sekerap yang diperlukan) atau ruang jika string1 tidak diberikan. Jika kedua-duanya string1 and string2
diberikan, string2 disisipkan sekali terus ke kiri setiap perkataan, dipotong jika
perlu, sebelum string1 digunakan untuk menghasilkan sebarang padding yang tinggal.
Jika salah satu daripada string1 or string2 hadir tetapi kosong, iaitu terdapat dua pembatas
bersama-sama pada ketika itu, watak pertama $IFS digunakan sebagai gantinya.
Jika MULTIBYTE pilihan berkuat kuasa, bendera m juga boleh diberikan, dalam hal ini
lebar akan digunakan untuk pengiraan padding; sebaliknya multibait individu
aksara dianggap sebagai menduduki satu unit lebar.
Jika MULTIBYTE pilihan tidak berkuat kuasa, setiap bait dalam rentetan dianggap sebagai
menduduki satu unit lebar.
Aksara kawalan sentiasa diandaikan sebagai satu unit lebar; ini membolehkan
mekanisme yang akan digunakan untuk menjana pengulangan aksara kawalan.
m Hanya berguna bersama-sama dengan salah satu bendera l or r atau dengan # operator panjang
apabila MULTIBYTE pilihan berkuat kuasa. Gunakan lebar aksara yang dilaporkan oleh
sistem dalam mengira berapa banyak rentetan yang didudukinya atau panjang keseluruhan
rentetan itu. Kebanyakan aksara yang boleh dicetak mempunyai lebar satu unit, walau bagaimanapun tertentu
Set watak Asia dan kesan khas tertentu menggunakan aksara yang lebih luas; menggabungkan
aksara mempunyai lebar sifar. Aksara yang tidak boleh dicetak sewenang-wenangnya dikira sebagai
lebar sifar; bagaimana ia sebenarnya akan dipaparkan akan berbeza-beza.
Jika m diulang, aksara sama ada mengira sifar (jika ia mempunyai lebar sifar), jika tidak
satu. Untuk rentetan aksara yang boleh dicetak ini mempunyai kesan mengira bilangan
glyphs (aksara yang kelihatan berasingan), kecuali untuk kes di mana menggabungkan
aksara itu sendiri mempunyai lebar bukan sifar (benar dalam abjad tertentu).
r:expr::string1::string2:
As l, tetapi letakkan perkataan di sebelah kanan dan sisipkan string2 serta-merta di sebelah kanan
tali yang hendak berlapik.
Pelapik kiri dan kanan boleh digunakan bersama. Dalam kes ini strategi adalah untuk digunakan
padding kiri ke separuh lebar pertama setiap perkataan yang terhasil, dan kanan
padding ke separuh masa kedua. Jika rentetan yang akan berlapik mempunyai lebar ganjil tambahan
padding digunakan di sebelah kiri.
s:rentetan:
Pemisahan medan paksa pada pemisah rentetan. Perhatikan bahawa a rentetan dua atau lebih
aksara bermakna kesemuanya mesti sepadan mengikut urutan; ini berbeza dengan
perlakuan dua atau lebih watak dalam IFS parameter. Lihat juga = bendera dan
yang SH_WORD_SPLIT pilihan. Rentetan kosong juga boleh diberikan dalam kes ini setiap
watak akan menjadi elemen yang berasingan.
Atas sebab sejarah, gelagat biasa bahawa elemen tatasusunan kosong dikekalkan
petikan berganda dalam dilumpuhkan untuk tatasusunan yang dijana oleh pemisahan; oleh itu
Berikut:
line="satu::tiga"
cetak -l "${(s.:.)line}"
menghasilkan dua baris keluaran untuk 1 and 3 dan elides medan kosong. Kepada
mengatasi kelakuan ini, bekalkan `(@)' bendera juga, iaitu "${(@s.:.)line}".
Z:memilih:
As z tetapi mengambil gabungan huruf pilihan antara pasangan berikut
watak pembatas. Tanpa pilihan kesannya adalah sama z. (Z+c+) sebab-sebab
ulasan untuk dihuraikan sebagai rentetan dan dikekalkan; mana-mana medan dalam tatasusunan yang terhasil
bermula dengan watak komen yang tidak dipetik ialah ulasan. (Z+C+) menyebabkan komen
untuk dihuraikan dan dibuang. Peraturan untuk ulasan adalah standard: apa-apa antara a
perkataan bermula dengan aksara ketiga daripada $HISTCHARS, lalai #, sehingga seterusnya
baris baru ialah komen. (Z+n+) menyebabkan baris baharu yang tidak disebut harga dianggap seperti biasa
ruang kosong, jika tidak, ia dianggap sebagai pembatas kod shell dan
ditukar kepada koma bertitik. Pilihan digabungkan dalam set pembatas yang sama,
contohnya (Z+Cn+).
_:bendera:
Garis bawah (_) bendera dikhaskan untuk kegunaan masa hadapan. Sehingga semakan zsh ini,
tidak ada yang sah bendera; apa-apa yang mengikuti garis bawah, selain daripada kosong
sepasang pembatas, dianggap sebagai ralat, dan bendera itu sendiri tidak mempunyai kesan.
Bendera berikut bermakna dengan ${...#...} or ${...%...} borang. The S and I
bendera juga boleh digunakan dengan ${.../...} bentuk.
S Cari subrentetan serta permulaan atau penghujung; dengan # mulakan dari awal
dan dengan % bermula dari hujung rentetan. Dengan penggantian melalui ${.../...} or
${...//...}, menentukan padanan tidak tamak, iaitu yang paling pendek dan bukannya yang
perlawanan terpanjang harus diganti.
I:expr:
Cari exprperlawanan ke (di mana expr menilai kepada nombor). Ini hanya terpakai apabila
mencari subrentetan, sama ada dengan S bendera, atau dengan ${.../...} (hanya
exprperlawanan th diganti) atau ${...//...} (semua perlawanan daripada exprke atas ialah
diganti). Lalai adalah untuk mengambil perlawanan pertama.
. exprpadanan ke- dikira supaya terdapat sama ada satu atau sifar padanan daripada setiap satu
kedudukan permulaan dalam rentetan, walaupun untuk perlawanan penggantian global
penggantian sebelumnya yang bertindih diabaikan. Dengan ${...%...} and ${...%%...}
terbentuk, kedudukan permulaan untuk perlawanan bergerak ke belakang dari penghujung sebagai
indeks meningkat, manakala dengan bentuk lain ia bergerak ke hadapan dari awal.
Oleh itu dengan rentetan
yang bertukar is yang kanan bertukar khususnya Ipswich?
penggantian borang ${(YA:N:)rentetan#w*ch} as N peningkatan daripada 1 akan sepadan
dan keluarkan `yang', `ahli sihir', `ahli sihir' dan `wich'; borang menggunakan `##' akan sepadan dan
keluarkan `yang bertukar is yang kanan bertukar khususnya Ipswich', `ahli sihir is yang kanan bertukar
khususnya Ipswich', `ahli sihir khususnya Ipswich' dan `wich'. Borang menggunakan `%' akan mengalih keluar
perlawanan yang sama seperti untuk `#', tetapi dalam susunan terbalik, dan borang menggunakan `%%' akan mengalih keluar
padanan yang sama seperti untuk `##' dalam susunan terbalik.
B Sertakan indeks permulaan perlawanan dalam keputusan.
E Sertakan indeks penghujung perlawanan dalam keputusan.
M Sertakan bahagian yang dipadankan dalam keputusan.
N Sertakan panjang perlawanan dalam keputusan.
R Sertakan bahagian yang tidak dapat ditandingi dalam keputusan (the Rest).
peraturan
Berikut ialah ringkasan peraturan untuk penggantian; ini mengandaikan bahawa pendakap hadir
sekitar penggantian, iaitu ${...}. Beberapa contoh khusus diberikan di bawah. Catatan
bahawa Kumpulan Pembangunan Zsh menerima tidak tanggungjawab untuk sebarang kerosakan otak yang mungkin
berlaku semasa membaca peraturan berikut.
1. Bersarang penggantian
Jika berbilang bersarang ${...} borang ada, penggantian dilakukan daripada
dalam ke luar. Pada setiap peringkat, penggantian mengambil kira sama ada
nilai semasa ialah skalar atau tatasusunan, sama ada keseluruhan penggantian adalah dalam dua kali ganda
petikan, dan bendera yang dibekalkan kepada tahap penggantian semasa, sama seperti
jika penggantian bersarang adalah yang paling luar. Bendera tidak dikibarkan sehingga
melampirkan penggantian; penggantian bersarang akan mengembalikan sama ada skalar atau an
tatasusunan seperti yang ditentukan oleh bendera, mungkin dilaraskan untuk petikan. Semua yang berikut
langkah-langkah berlaku di mana berkenaan pada semua peringkat penggantian. Perhatikan bahawa, melainkan
yang `(P)' bendera hadir, bendera dan mana-mana subskrip digunakan terus kepada nilai
daripada penggantian bersarang; sebagai contoh, pengembangan ${${foo}} berkelakuan tepat
yang sama seperti ${foo}.
Pada setiap peringkat penggantian bersarang, perkataan yang digantikan mengalami semua bentuk
penggantian perkataan tunggal (iaitu bukan penjanaan nama fail), termasuk arahan
penggantian, pengembangan aritmetik dan pengembangan nama fail (iaitu terkemuka ~ and =).
Oleh itu, sebagai contoh, ${${:-=cat}:h} berkembang ke direktori di mana kucing program
menetap. (Penjelasan: penggantian dalaman tidak mempunyai parameter tetapi lalai
nilai =kucing, yang dikembangkan dengan pengembangan nama fail ke laluan penuh; bahagian luar
penggantian kemudian menggunakan pengubah suai :h dan mengambil bahagian direktori
laluan.)
2. Dalaman parameter bendera
Sebarang bendera parameter yang ditetapkan oleh salah satu daripada set taip keluarga perintah, khususnya
L, R, Z, u and l bendera untuk padding dan huruf besar, digunakan terus pada
nilai parameter. Perhatikan bendera ini adalah pilihan kepada arahan, cth `set taip -Z';
ia tidak sama dengan bendera yang digunakan dalam penggantian parameter.
3. Parameter melanggan
Jika nilai adalah rujukan parameter mentah dengan subskrip, seperti ${var[3]}, yang
kesan langganan digunakan terus pada parameter. Subskrip adalah
dinilai dari kiri ke kanan; subskrip berikutnya digunakan pada nilai skalar atau tatasusunan
dihasilkan oleh subskrip sebelumnya. Justeru jika var ialah susunan, ${var[1][2]} adalah
aksara kedua bagi perkataan pertama, tetapi ${var[2,4][2]} ialah keseluruhan perkataan ketiga
(perkataan kedua bagi julat perkataan dua hingga empat daripada tatasusunan asal).
Sebarang bilangan skrip mungkin muncul. Bendera seperti (k) and (V) yang mengubah
hasil langganan digunakan.
4. Parameter nama penggantian
Kesan mana-mana (P) flag, yang menganggap nilai setakat ini sebagai nama parameter dan
menggantikannya dengan nilai yang sepadan, digunakan.
5. Dipetik dua kali menyertai
Jika nilai selepas proses ini ialah tatasusunan, dan penggantian muncul dalam dua kali ganda
petikan, dan tidak satu pun (@) bendera mahupun a # operator panjang hadir pada arus
tahap, kemudian perkataan nilai digabungkan dengan aksara pertama parameter
$IFS, secara lalai ruang, antara setiap perkataan (susunan perkataan tunggal tidak diubah suai).
Jika (j) bendera hadir, yang digunakan untuk menyertai bukannya $IFS.
6. Bersarang melanggan
Sebarang subskrip yang tinggal (iaitu penggantian bersarang) dinilai pada ini
titik, berdasarkan sama ada nilai ialah tatasusunan atau skalar. Seperti dengan 3., pelbagai
subskrip boleh muncul. Perhatikan bahawa ${foo[2,4][2]} adalah setara dengan
${${foo[2,4]}[2]} dan juga untuk "${${(@)foo[2,4]}[2]}" (penggantian bersarang
mengembalikan tatasusunan dalam kedua-dua kes), tetapi tidak "${${foo[2,4]}[2]}" (yang bersarang
penggantian mengembalikan skalar kerana petikan).
7. Pengubah
Mana-mana pengubah suai, seperti yang ditentukan oleh ` trailing#', `%', `/' (mungkin digandakan) atau dengan a
set pengubah bentuk : ... (lihat bahagian `Pengubahsuai' dalam bahagian
`Peluasan Sejarah'), digunakan pada perkataan nilai pada tahap ini.
8. Watak penilaian
Mana-mana (#) bendera digunakan, menilai hasil setakat ini secara numerik sebagai aksara.
9. Panjang
Mana-mana permulaan # pengubahsuai, iaitu dalam bentuk ${#var}, digunakan untuk menilai panjang
ungkapan setakat ini.
10. Terpaksa menyertai
Jika `(j)' bendera hadir, atau tiada `(j)' bendera hadir tetapi rentetannya adalah untuk menjadi
berpecah seperti yang diberikan oleh peraturan 11., dan penyertaan tidak berlaku pada langkah 5., sebarang perkataan dalam
nilai dicantumkan bersama menggunakan rentetan yang diberikan atau aksara pertama $IFS
jika tiada. Ambil perhatian bahawa `(F)' bendera secara tersirat membekalkan rentetan untuk menyertai ini
cara.
11. Mudah perkataan membelah
Jika salah satu daripada `(S)' atau `(F)' bendera hadir, atau `=' specifier hadir
(contohnya ${=var}), perkataan dipecahkan pada kejadian rentetan yang ditentukan, atau (untuk =
dengan kedua-dua bendera tidak hadir) mana-mana watak dalam $IFS.
Jika tiada`(S)', `(F)' atau `=' telah diberikan, tetapi perkataan itu tidak dipetik dan pilihan
SH_WORD_SPLIT ditetapkan, perkataan terbahagi pada kejadian mana-mana aksara dalam
$IFS. Perhatikan langkah ini juga, berlaku pada semua peringkat penggantian bersarang.
12. kes pengubahsuaian
Sebarang pengubahsuaian kes daripada salah satu bendera (L), (ATAU) or (C) digunakan.
13. Melarikan diri turutan penggantian
Mula-mula sebarang penggantian daripada (G) bendera dilakukan, kemudian apa-apa gaya segera
pemformatan daripada (%) keluarga bendera digunakan.
14. Quote permohonan
Sebarang petik atau tidak petik menggunakan (q) and (Q) dan bendera berkaitan digunakan.
15. Direktori menamakan
Sebarang penggantian nama direktori menggunakan (D) bendera digunakan.
16. Keterlihatan Penambahbaikan
Sebarang pengubahsuaian untuk menjadikan aksara kelihatan menggunakan (V) bendera digunakan.
17. Leksikal perkataan membelah
Jika '(z)' bendera atau salah satu bentuk '(Z)' bendera hadir, perkataan itu
berpecah seolah-olah ia adalah baris arahan shell, supaya tanda petikan dan lain-lain
metakarakter digunakan untuk menentukan apa yang membentuk perkataan. Perhatikan bentuk ini
perpecahan adalah berbeza sepenuhnya daripada yang diterangkan oleh peraturan 11.: ia tidak digunakan
$IFS, dan tidak menyebabkan penyertaan paksa.
18. Keunikan
Jika hasilnya ialah tatasusunan dan `(awak)' bendera telah hadir, elemen pendua adalah
dikeluarkan daripada tatasusunan.
19. Susunan
Jika hasilnya masih tatasusunan dan salah satu daripada `(O)' atau `(ATAU)'bendera hadir,
tatasusunan disusun semula.
20. RC_EXPAND_PARAM
Pada ketika ini keputusan dibuat sama ada sebarang elemen tatasusunan yang terhasil akan menjadi
gabungan unsur demi unsur dengan teks sekeliling, seperti yang diberikan oleh sama ada
RC_EXPAND_PARAM pilihan atau `^' bendera.
21. Penilaian semula
Mana-mana `(E)' bendera digunakan pada nilai, memaksa ia diperiksa semula untuk yang baru
penggantian parameter, tetapi juga untuk penggantian perintah dan aritmetik.
22. padding
Sebarang padding nilai dengan `(l.mengisi.)' atau `(r.mengisi.)' bendera digunakan.
23. Semantik menyertai
Dalam konteks di mana semantik pengembangan memerlukan satu perkataan untuk terhasil, semua perkataan
digabungkan semula dengan watak pertama IFS antara. Jadi dalam `${(P)${(f)garisan}}'
nilai ${lines} dipisahkan pada baris baharu, tetapi kemudian mesti disertai semula sebelum ini
yang P bendera boleh digunakan.
Jika satu perkataan tidak diperlukan, peraturan ini dilangkau.
24. Kosong hujah penyingkiran
Jika penggantian tidak muncul dalam petikan berganda, sebarang panjang sifar yang terhasil
hujah, sama ada daripada skalar atau elemen tatasusunan, disingkirkan daripada senarai
daripada argumen yang dimasukkan ke dalam baris arahan.
Tegasnya, pengalihan keluar berlaku kemudian kerana perkara yang sama berlaku dengan bentuk lain
penggantian; perkara yang perlu diperhatikan di sini ialah ia berlaku selepas mana-mana
operasi parameter di atas.
Contoh
Bendera f berguna untuk memisahkan baris penggantian petikan dua demi baris. Sebagai contoh,
${(f)"$(fail)"} menggantikan kandungan fail dibahagikan supaya setiap baris adalah unsur
daripada tatasusunan yang terhasil. Bandingkan ini dengan kesan daripada $(fail) sahaja, yang membahagikan
failkan dengan perkataan, atau petikan berganda dalam yang sama, yang menjadikan keseluruhan kandungan
failkan satu rentetan.
Yang berikut menggambarkan peraturan untuk pengembangan parameter bersarang. Sepatutnya begitu $foo
mengandungi tatasusunan (bar baz):
"${(@)${foo}[1]}"
Ini menghasilkan hasilnya b. Pertama, penggantian dalaman "${foo}", yang tidak mempunyai
susunan (@) bendera, menghasilkan satu hasil perkataan "bar baz". Penggantian luar
"${(@)...[1]}" mengesan bahawa ini adalah skalar, supaya (walaupun `(@)' bendera) yang
subskrip memilih aksara pertama.
"${${(@)foo}[1]}"
Ini menghasilkan keputusan `bar'. Dalam kes ini, penggantian dalaman "${(@)foo}"
menghasilkan tatasusunan `(bar baz)'. Penggantian luar "${...[1]}" mengesan itu
ini ialah tatasusunan dan memilih perkataan pertama. Ini serupa dengan kes mudah
"${foo[1]}".
Sebagai contoh peraturan untuk pemisahan dan pencantuman perkataan, andaikan $foo mengandungi tatasusunan
`(ax1 bx1)'. Kemudian
${(s/x/)foo}
menghasilkan perkataan `a', `1 b' dan `1'.
${(j/x/s/x/)foo}
menghasilkan `a', `1', `b' dan `1'.
${(s/x/)foo%%1*}
menghasilkan `a' dan ` b' (perhatikan ruang tambahan). Sebagai penggantian berlaku sebelum sama ada
bergabung atau membelah, operasi pertama menjana tatasusunan diubah suai (kapak bx),
yang bergabung untuk memberi "kapak bx", dan kemudian belah untuk memberikan `a', ` b' dan `'. The
rentetan kosong akhir kemudiannya akan dihapuskan, kerana ia tidak dalam petikan berganda.
COMMAND PENGGANTIAN
Perintah yang disertakan dalam kurungan didahului dengan tanda dolar, seperti `$(...)', atau dipetik dengan
loghat kubur, seperti ``...`', digantikan dengan keluaran standardnya, dengan sebarang pengekoran
baris baharu dipadamkan. Jika penggantian tidak disertakan dalam petikan berganda, keluarannya ialah
dipecahkan kepada perkataan menggunakan IFS parameter. Penggantian `$(kucing foo)' boleh diganti
dengan setara tetapi lebih cepat `$(foo)'. Dalam kedua-dua kes, jika pilihan GLOB_SUBST ditetapkan,
output layak untuk penjanaan nama fail.
ARITMETIK EXPANSION
Rentetan dalam bentuk `$[exp]' atau `$((exp))' digantikan dengan nilai
ungkapan aritmetik exp. exp adalah tertakluk kepada parameter pengembangan, arahan penggantian
and aritmetik pengembangan sebelum ia dinilai. Lihat bahagian `Penilaian Aritmetik'.
PEMAKAI EXPANSION
Rentetan dalam bentuk `foo{xx,yy,zz}bar' dikembangkan kepada perkataan individu `foxxbar',
`fooyybar' dan `foozzbar'. Urutan kiri ke kanan dikekalkan. Konstruk ini mungkin
bersarang. Koma boleh dipetik untuk memasukkannya secara literal dalam satu perkataan.
Ungkapan bentuk `{n1..n2}', di mana n1 and n2 adalah integer, dikembangkan kepada setiap
nombor antara n1 and n2 inklusif. Jika mana-mana nombor bermula dengan sifar, semua
nombor yang terhasil akan dipadatkan dengan sifar pendahuluan kepada lebar minimum itu, tetapi untuk
nombor negatif yang - watak juga termasuk dalam lebar. Jika nombornya masuk
tertib menurun urutan yang terhasil juga akan tertib menurun.
Ungkapan bentuk `{n1..n2..n3}', di mana n1, n2, dan n3 adalah integer, dikembangkan
seperti di atas, tetapi hanya setiap n3nombor ke- bermula dari n1 adalah keluaran. Jika n3 adalah negatif
nombor dikeluarkan dalam susunan terbalik, ini berbeza sedikit daripada sekadar bertukar n1
and n2 dalam kes bahawa langkah n3 tidak membahagikan julat sama rata. Zero padding boleh
dinyatakan dalam mana-mana tiga nombor, menyatakannya dalam yang ketiga boleh berguna untuk digunakan
contoh `{-99..100..01}' yang tidak mungkin ditentukan dengan meletakkan 0 pada salah satu daripada
dua nombor pertama (iaitu pad kepada dua aksara).
Ungkapan bentuk `{c1..c2}', di mana c1 and c2 ialah aksara tunggal (yang mungkin
aksara berbilangbait), dikembangkan kepada setiap aksara dalam julat daripada c1 kepada c2 in
apa jua urutan aksara digunakan secara dalaman. Untuk aksara dengan mata kod di bawah 128
ini adalah ASCII AS (ini adalah satu-satunya kes yang diperlukan oleh kebanyakan pengguna). Jika ada yang mencelah
aksara tidak boleh dicetak, petikan yang sesuai digunakan untuk menjadikannya boleh dicetak. Sekiranya
urutan aksara diterbalikkan, output adalah dalam susunan terbalik, cth. `{d..a}'adalah
digantikan dengan `d c b a'.
Jika ungkapan pendakap tidak sepadan dengan bentuk di atas, ia dibiarkan tidak berubah, melainkan
pilihan BRACE_CCL (singkatan untuk `kelas watak pendakap') ditetapkan. Dalam kes itu, ia
dikembangkan kepada senarai aksara individu antara pendakap yang diisih ke dalam
susunan aksara dalam set aksara ASCII (aksara berbilang bait tidak ada pada masa ini
dikendalikan). Sintaksnya serupa dengan a [...] ungkapan dalam penjanaan nama fail: `-'adalah
diperlakukan khas untuk menunjukkan julat aksara, tetapi `^' atau `!' sebagai watak pertama
dirawat secara normal. Contohnya, `{abcdef0-9}' mengembang kepada 16 perkataan 0 1 2 3 4 5 6 7 8 9 a
b c d e f.
Ambil perhatian bahawa pengembangan pendakap bukan sebahagian daripada penjanaan nama fail (globbing); satu ungkapan
seperti */{foo,bar} terbahagi kepada dua perkataan yang berasingan */foo and */bar sebelum nama fail
generasi berlaku. Khususnya, ambil perhatian bahawa ini bertanggungjawab untuk menghasilkan `tiada padanan'
ralat jika sama ada daripada dua ungkapan tidak sepadan; ini perlu dibezakan
*/(foo|bar), yang dianggap sebagai satu corak tetapi sebaliknya mempunyai kesan yang serupa.
Untuk menggabungkan pengembangan pendakap dengan pengembangan tatasusunan, lihat bahagian ${^spec} bentuk yang diterangkan dalam
bahagian Pengembangan Parameter di atas.
NAMA FAIL EXPANSION
Setiap perkataan disemak untuk melihat sama ada ia bermula dengan ` yang tidak disebut~'. Jika ia berlaku, maka perkataan itu
sehingga `/', atau akhir perkataan jika tiada `/', disemak untuk melihat sama ada ia boleh
digantikan dengan salah satu cara yang diterangkan di sini. Jika ya, maka `~' dan yang diperiksa
bahagian digantikan dengan nilai gantian yang sesuai.
A `~' dengan sendirinya digantikan dengan nilai $ HOME. A `~' diikuti dengan `+' atau `-'adalah
digantikan dengan direktori kerja semasa atau sebelumnya, masing-masing.
A `~' diikuti dengan nombor digantikan dengan direktori pada kedudukan itu dalam direktori
timbunan. `~0' adalah bersamaan dengan `~+', dan `~1' ialah bahagian atas timbunan. `~+' diikuti oleh a
nombor digantikan dengan direktori pada kedudukan itu dalam timbunan direktori. `~ + 0'adalah
bersamaan dengan `~+', dan `~ + 1' ialah bahagian atas timbunan. `~-' diikuti dengan nombor ialah
digantikan oleh direktori yang banyak kedudukan dari bahagian bawah timbunan. `~-0' adalah
bahagian bawah timbunan. The PUSHD_MINUS opsyen menukar kesan `~+' dan `~-' mana
mereka diikuti oleh nombor.
Dinamik bernama direktori
Sekiranya fungsinya zsh_directory_name wujud, atau pembolehubah shell
zsh_directory_name_functions wujud dan mengandungi pelbagai nama fungsi, kemudian
fungsi digunakan untuk melaksanakan penamaan direktori dinamik. Fungsinya dicuba dalam
pesanan sehingga seseorang mengembalikan status sifar, jadi adalah penting bahawa fungsi menguji sama ada mereka
boleh mengendalikan kes berkenaan dan mengembalikan status yang sesuai.
A `~' diikuti dengan rentetan namstr dalam kurungan segi empat sama yang tidak disebut harga dianggap sebagai a
nama direktori dinamik. Ambil perhatian bahawa kurungan empat segi tutup pertama yang tidak disebut harga sentiasa
tamat namstr. Fungsi shell diluluskan dua argumen: rentetan n (untuk nama)
and namstr. Ia sepatutnya menetapkan tatasusunan membalas kepada satu elemen iaitu
direktori yang sepadan dengan nama dan kembalikan status sifar (melaksanakan tugasan sebagai
penyataan terakhir biasanya mencukupi), atau ia harus mengembalikan status bukan sifar. Dalam bekas
kes elemen balasan digunakan sebagai direktori; dalam kes terakhir penggantian ialah
dianggap gagal. Jika semua fungsi gagal dan pilihan TIDAK SETANDING ditetapkan, ralat
keputusan.
Fungsi yang ditakrifkan seperti di atas juga digunakan untuk melihat sama ada direktori boleh diubah menjadi a
nama, contohnya semasa mencetak susunan direktori atau semasa mengembangkan %~ dalam gesaan. Dalam
kes ini setiap fungsi diluluskan dua hujah: rentetan d (untuk direktori) dan
calon untuk penamaan dinamik. Fungsi harus sama ada mengembalikan status bukan sifar, jika
direktori tidak boleh dinamakan oleh fungsi, atau ia harus menetapkan balasan tatasusunan untuk terdiri daripada
dua elemen: yang pertama ialah nama dinamik untuk direktori (seperti yang akan muncul dalam
`~[...]'), dan yang kedua ialah panjang awalan direktori yang akan diganti. Untuk
contoh, jika direktori percubaan adalah /home/myname/src/zsh dan nama dinamik untuk
/home/myname/src (yang mempunyai 16 aksara) ialah s, kemudian fungsi ditetapkan
balasan=(s 16)
Nama direktori yang dikembalikan itu dibandingkan dengan nama statik yang mungkin untuk bahagian
laluan direktori, seperti yang diterangkan di bawah; ia digunakan jika panjang awalan sepadan (16 dalam
contoh) lebih panjang daripada yang dipadankan dengan mana-mana nama statik.
Ia bukan satu keperluan bahawa fungsi melaksanakan kedua-duanya n and d panggilan; sebagai contoh, ia
mungkin sesuai untuk bentuk pengembangan dinamik tertentu yang tidak dikontrakkan kepada nama.
Dalam kes itu sebarang panggilan dengan hujah pertama d harus menyebabkan status bukan sifar menjadi
kembali.
Sistem penyiapan memanggil `zsh_directory_name c' diikuti dengan panggilan yang setara ke
elemen tatasusunan zsh_directory_name_functions, jika wujud, untuk melengkapkan
nama dinamik untuk direktori. Kod untuk ini hendaklah seperti mana-mana penyiapan lain
fungsi seperti yang diterangkan dalam zshcompsys(1).
Sebagai contoh yang berfungsi, berikut ialah fungsi yang mengembangkan sebarang nama dinamik bermula dengan
rentetan p: ke direktori di bawah /home/pws/perforce. Dalam kes mudah ini nama statik untuk
direktori akan sama berkesan.
zsh_directory_name() {
meniru -L zsh
setopt extendedglob
tempatan -a sepadan dengan mbegin soleh
if [[ $1 = d ]]; kemudian
# berpaling yang direktori ke dalam a nama
if [[ $2 = (#b)(/home/pws/perforce/)([^/]##)* ]]; kemudian
set taip - untuk membalas
reply=(p:$match[2] $(( ${#match[1]} + ${#match[2]} )) )
lagi
pulangan 1
fi
elif [[ $1 = n ]]; kemudian
# berpaling yang nama ke dalam a direktori
[[ $2 != (#b)p:(?*) ]] && pulangan 1
set taip - untuk membalas
reply=(/home/pws/perforce/$match[1])
elif [[ $1 = c ]]; kemudian
# melengkapkan nama
tempatan mengeksploitasi
tempatan -a dirs
dirs=(/home/pws/perforce/*(/:t))
dirs=(p:${^dirs})
_mahu dynamic-dirs mengeksploitasi 'dinamik direktori' kompadd -S\] -a dirs
pulangan
lagi
pulangan 1
fi
pulangan 0
}
statik bernama direktori
A `~' diikuti dengan apa-apa yang belum dilindungi yang terdiri daripada sebarang bilangan alfanumerik
aksara atau garis bawah (`_'), sempang (`-'), atau titik (`.') dipandang sebagai nama
direktori, dan digantikan dengan nilai direktori bernama itu jika dijumpai. Direktori bernama
biasanya direktori rumah untuk pengguna pada sistem. Mereka juga boleh ditakrifkan jika
teks selepas `~' ialah nama parameter shell rentetan yang nilainya bermula dengan `/'.
Ambil perhatian bahawa garis miring mengekor akan dialih keluar dari laluan ke direktori (walaupun
parameter asal tidak diubah suai).
Ia juga mungkin untuk menentukan nama direktori menggunakan -d pilihan untuk hash terbina dalam.
Apabila cangkerang mencetak laluan (cth apabila mengembang %~ dalam gesaan atau semasa mencetak
timbunan direktori), laluan disemak untuk melihat sama ada ia mempunyai direktori bernama sebagai awalannya.
Jika ya, maka bahagian awalan digantikan dengan `~' diikuti dengan nama
direktori. Yang lebih pendek daripada dua cara merujuk kepada direktori digunakan, iaitu sama ada
nama direktori atau laluan penuh; nama digunakan jika panjangnya sama. The
parameter $PWD and $OLDPWD tidak pernah disingkatkan dengan cara ini.
`=' pengembangan
Jika sesuatu perkataan bermula dengan ` yang tidak dipetik=' dan juga SAMA pilihan ditetapkan, baki daripada
perkataan diambil sebagai nama perintah. Jika perintah wujud dengan nama itu, perkataan itu ialah
digantikan dengan nama laluan penuh arahan.
Nota
Peluasan nama fail dilakukan di sebelah kanan penetapan parameter,
termasuk yang muncul selepas arahan set taip keluarga. Dalam kes ini, hak
sebelah tangan akan dianggap sebagai senarai yang dipisahkan dengan titik bertindih mengikut cara PATH parameter,
supaya `~' atau `=' berikutan `:' layak untuk pengembangan. Semua perangai macam tu boleh
dilumpuhkan dengan memetik `~', yang `=', atau keseluruhan ungkapan (tetapi bukan sekadar
kolon); yang SAMA pilihan juga dihormati.
Jika pilihan MAGIC_EQUAL_SUBST ditetapkan, sebarang hujah shell yang tidak disebut dalam borang
`pengecam=ungkapan' menjadi layak untuk pengembangan fail seperti yang diterangkan dalam sebelumnya
perenggan. Memetik yang pertama `=' juga menghalang ini.
NAMA FAIL GENERASI
Jika perkataan mengandungi contoh yang tidak dipetik bagi salah satu aksara `*', `(', `|', `<', `[',
atau `?', ia dianggap sebagai corak untuk penjanaan nama fail, melainkan jika GLOBAL pilihan adalah
tidak ditetapkan. Sekiranya EXTENDED_GLOB pilihan ditetapkan, `^' dan `#' aksara juga menunjukkan a
corak; jika tidak, mereka tidak dirawat secara khusus oleh cangkerang.
Perkataan itu digantikan dengan senarai nama fail yang diisih yang sepadan dengan corak. Jika tidak
corak padanan ditemui, cangkerang memberikan mesej ralat, melainkan jika NULL_GLOB pilihan
ditetapkan, dalam hal ini perkataan dipadamkan; atau melainkan jika TIDAK SETANDING pilihan tidak ditetapkan, di mana
kes perkataan itu dibiarkan tidak berubah.
Dalam penjanaan nama fail, aksara `/' mesti dipadankan secara eksplisit; juga, sebuah `.' mesti
dipadankan secara eksplisit pada permulaan corak atau selepas `/', melainkan jika GLOB_DOTS
pilihan ditetapkan. Tiada corak penjanaan nama fail yang sepadan dengan fail `.' atau `..'. Dalam lain
contoh padanan corak, `/' dan `.' tidak dilayan secara istimewa.
Glob Operator
* Memadankan sebarang rentetan, termasuk rentetan nol.
? Padan dengan mana-mana watak.
[...] Padan dengan mana-mana aksara yang disertakan. Julat aksara boleh ditentukan oleh
memisahkan dua aksara dengan `-'. A `-' atau `]' boleh dipadankan dengan memasukkannya sebagai
aksara pertama dalam senarai. Terdapat juga beberapa kelas bernama
aksara, dalam bentuk `[:nama:]' dengan makna berikut. Penggunaan set pertama
makro yang disediakan oleh sistem pengendalian untuk menguji aksara yang diberikan
gabungan, termasuk sebarang pengubahsuaian disebabkan tetapan bahasa tempatan, lihat
ctype(3):
[:alnum:]
Wataknya adalah alfanumerik
[:alfa:]
Wataknya mengikut abjad
[:ascii:]
Watak ialah 7-bit, iaitu aksara satu-bait tanpa bit atas
ditetapkan.
[:kosong:]
Watak itu sama ada ruang atau tab
[:cntrl:]
Watak adalah watak kawalan
[:digit:]
Watak ialah digit perpuluhan
[:graf:]
Watak itu ialah aksara boleh cetak selain ruang putih
[:bawah:]
Watak ialah huruf kecil
[:cetak:]
Watak boleh dicetak
[:punct:]
Watak boleh dicetak tetapi bukan abjad angka atau ruang kosong
[:ruang:]
Wataknya ialah ruang kosong
[:atas:]
Watak ialah huruf besar
[:xdigit:]
Watak ialah digit heksadesimal
Satu lagi set kelas bernama dikendalikan secara dalaman oleh shell dan tidak
sensitif kepada kawasan:
[:IDENT:]
Watak dibenarkan untuk membentuk sebahagian daripada pengecam shell, seperti a
nama parameter
[:IFS:]
Watak digunakan sebagai pemisah medan input, iaitu terkandung dalam
IFS parameter
[:IFSSPACE:]
Watak tersebut ialah watak ruang putih IFS; lihat dokumentasi untuk IFS
dalam zshparam(1) halaman manual.
[:TIDAK LENGKAP:]
Padan dengan bait yang memulakan aksara berbilang bait yang tidak lengkap. Perhatikan bahawa
mungkin terdapat urutan lebih daripada satu bait yang diambil bersama membentuk
awalan aksara berbilangbait. Untuk menguji bait yang mungkin tidak lengkap
urutan, gunakan corak `[[:TIDAK LENGKAP:]]*'. Ini tidak akan sepadan dengan a
jujukan bermula dengan aksara multibait yang sah.
[:TIDAK SAH:]
Padan dengan bait yang tidak memulakan aksara berbilangbait yang sah. Perhatikan ini
mungkin merupakan bait kesinambungan bagi aksara berbilang bait yang tidak lengkap sebagai mana-mana bahagian
daripada rentetan berbilangbait yang terdiri daripada berbilangbait yang tidak sah dan tidak lengkap
aksara dianggap sebagai bait tunggal.
[:PERKATAAN:]
Watak itu dianggap sebagai sebahagian daripada perkataan; ujian ini sensitif kepada
nilai WORDCARS parameter
Ambil perhatian bahawa kurungan segi empat sama adalah tambahan kepada yang melampirkan keseluruhan set
aksara, jadi untuk menguji satu aksara abjad angka yang anda perlukan `[[:alnum:]]'.
Set aksara bernama boleh digunakan bersama jenis lain, cth. `[[:alpha:]0-9]'.
[^...]
[!...] suka [...], kecuali ia sepadan dengan mana-mana aksara yang tiada dalam set yang diberikan.
<[x]-[y]>
Memadankan sebarang nombor dalam julat x kepada y, inklusif. Mana-mana nombor mungkin
ditinggalkan untuk menjadikan julat terbuka; oleh itu `<->' sepadan dengan sebarang nombor. Untuk memadankan
digit individu, yang [...] bentuk adalah lebih cekap.
Berhati-hati apabila menggunakan kad bebas lain bersebelahan dengan corak bentuk ini; untuk
contohnya, <0-9>* akan benar-benar sepadan dengan mana-mana nombor sekalipun pada permulaan
rentetan, sejak `<0-9>' akan sepadan dengan digit pertama, dan `*' akan sepadan dengan mana-mana
yang lain. Ini adalah perangkap bagi mereka yang tidak berhati-hati, tetapi sebenarnya adalah akibat yang tidak dapat dielakkan
peraturan bahawa perlawanan yang paling lama mungkin sentiasa berjaya. Ungkapan seperti
`<0-9>[^[:digit:]]*' boleh digunakan sebaliknya.
(...) Padan dengan corak yang disertakan. Ini digunakan untuk kumpulan. Sekiranya KSH_GLOB pilihan
ditetapkan, kemudian `@', `*', `+', `?' atau `!' serta-merta sebelum `(' dirawat
khususnya, seperti butiran di bawah. Pilihannya SH_GLOB menghalang kurungan kosong daripada
digunakan dengan cara ini, walaupun KSH_GLOB pilihan masih ada.
Ambil perhatian bahawa pengelompokan tidak boleh dilanjutkan ke beberapa direktori: ia adalah satu ralat untuk dimiliki
a `/' dalam kumpulan (ini hanya terpakai untuk corak yang digunakan dalam penjanaan nama fail).
Terdapat satu pengecualian: sekumpulan borang (tepuk/)# muncul sebagai jalan yang lengkap
segmen boleh sepadan dengan jujukan direktori. Sebagai contoh, foo/(a*/)#bar perlawanan
foo/bar, foo/mana-mana/bar, foo/mana-mana/anyother/bar, Dan sebagainya.
x|y Perlawanan sama ada x or y. Pengendali ini mempunyai keutamaan yang lebih rendah daripada yang lain. `|'
watak mesti berada dalam kurungan, untuk mengelakkan tafsiran sebagai saluran paip.
^x (Memerlukan EXTENDED_GLOB untuk ditetapkan.) Memadankan apa sahaja kecuali corak x. ini
mempunyai keutamaan yang lebih tinggi daripada `/', jadi'^foo/bar' akan mencari direktori dalam `.'
kecuali `./foo' untuk fail bernama `bar'.
x~y (Memerlukan EXTENDED_GLOB untuk ditetapkan.) Padankan apa-apa yang sepadan dengan corak x tetapi
tidak sepadan y. Ini mempunyai keutamaan yang lebih rendah daripada mana-mana operator kecuali `|', jadi
`*/*~foo/bar' akan mencari semua fail dalam semua direktori dalam `.' dan kemudian tidak termasuk
`foo/bar' jika ada perlawanan seperti itu. Corak berbilang boleh dikecualikan oleh
`foo~bar~asas'. Dalam corak pengecualian (y), `/' dan `.' tidak dilayan secara istimewa
cara mereka biasanya dalam globbing.
x# (Memerlukan EXTENDED_GLOB untuk ditetapkan.) Padanan sifar atau lebih kejadian
pola x. Pengendali ini mempunyai keutamaan yang tinggi; `12 #' adalah bersamaan dengan `1(2#)',
bukannya `(12)#'. Ia adalah ralat untuk ` yang tidak disebut#' untuk mengikuti sesuatu yang
tidak boleh diulang; ini termasuk rentetan kosong, corak yang telah diikuti oleh
`##', atau kurungan apabila sebahagian daripada a KSH_GLOB corak (contohnya, `!(foo)#'adalah
tidak sah dan mesti digantikan dengan `*(!(foo))').
x## (Memerlukan EXTENDED_GLOB untuk ditetapkan.) Memadankan satu atau lebih kejadian corak
x. Pengendali ini mempunyai keutamaan yang tinggi; `12 ##' adalah bersamaan dengan `1(2##)', sebaliknya
daripada `(12)##'. Tidak lebih daripada dua aktif `#' watak mungkin muncul bersama-sama. (Catatan
potensi pertembungan dengan kelayakan glob dalam bentuk `1(2##)' yang sepatutnya
oleh itu dielakkan.)
seperti ksh Glob Operator
Jika KSH_GLOB pilihan ditetapkan, kesan kurungan boleh diubah suai dengan yang sebelumnya
`@', `*', `+', `?' atau `!'. Watak ini tidak perlu dipetik untuk mempunyai kesan khas,
tetapi `(' mesti.
@(...) Padankan corak dalam kurungan. (Seperti `(...)'.)
*(...) Padankan sebarang bilangan kejadian. (Seperti `(...)#', kecuali direktori rekursif itu
carian tidak disokong.)
+(...) Padankan sekurang-kurangnya satu kejadian. (Seperti `(...)##', kecuali direktori rekursif itu
carian tidak disokong.)
?(...) Padankan sifar atau satu kejadian. (Seperti `(|...)'.)
!(...) Padankan apa sahaja kecuali ungkapan dalam kurungan. (Seperti `(^(...))'.)
Precedence
Keutamaan pengendali yang diberikan di atas adalah (tertinggi) `^', `/', `~', `|' (paling rendah); yang
pengendali yang tinggal hanya dirawat dari kiri ke kanan sebagai sebahagian daripada rentetan, dengan `#'
dan `##' memohon kepada unit terdahulu yang paling singkat (iaitu aksara, `?', `[...]',
`<...>', atau ungkapan dalam kurungan). Seperti yang dinyatakan di atas, a `/' digunakan sebagai direktori
pemisah mungkin tidak muncul di dalam kurungan, manakala `|' mesti berbuat demikian; dalam corak yang digunakan dalam
konteks lain daripada penjanaan nama fail (contohnya, dalam kes kenyataan dan ujian dalam
`[[...]]'), a `/' tidak istimewa; dan `/' juga tidak istimewa selepas `~' muncul
kurungan luar dalam corak nama fail.
Melompat Flags
Terdapat pelbagai bendera yang menjejaskan mana-mana teks di sebelah kanannya sehingga penghujung
melampirkan kumpulan atau ke hujung corak; mereka memerlukan EXTENDED_GLOB pilihan. Semua
ambil borang (#X) di mana X mungkin mempunyai salah satu daripada bentuk berikut:
i Tidak sensitif huruf besar: huruf besar atau huruf kecil dalam corak padan atas atau
huruf kecil.
l Aksara huruf kecil dalam corak sepadan dengan huruf besar atau huruf kecil; atas
aksara huruf besar dalam corak masih hanya sepadan dengan aksara huruf besar.
I Sensitif kes: secara tempatan menafikan kesan daripada i or l dari saat itu.
b Aktifkan rujukan belakang untuk kumpulan dalam kurungan dalam corak; ini tidak berfungsi
dalam penjanaan nama fail. Apabila corak dengan set kurungan aktif adalah
dipadankan, rentetan yang dipadankan oleh kumpulan disimpan dalam tatasusunan $ padanan, yang
indeks permulaan kurungan yang dipadankan dalam tatasusunan $mbegin, Dan
indeks penghujung dalam tatasusunan $baik, dengan elemen pertama setiap tatasusunan
sepadan dengan kumpulan kurungan pertama, dan seterusnya. Tatasusunan ini tidak
sebaliknya istimewa kepada cangkerang. Indeks menggunakan konvensyen yang sama seperti yang dilakukan
penggantian parameter, supaya unsur-unsur $baik and $mbegin boleh digunakan dalam
subskrip; yang KSH_ARRAYS pilihan dihormati. Set bendera globbing tidak
dianggap kumpulan kurungan; hanya sembilan kurungan aktif yang pertama boleh
dirujuk.
Sebagai contoh,
foo="a rentetan bersama a mesej"
if [[ $foo = (a|an)' '(#b)(*)' '* ]]; kemudian
cetak ${foo[$mbegin[1],$mend[1]]}
fi
cetakan `rentetan bersama a'. Perhatikan bahawa kurungan pertama adalah sebelum (#b) and
tidak mencipta rujukan belakang.
Rujukan belakang berfungsi dengan semua bentuk padanan corak selain daripada nama fail
generasi, tetapi ambil perhatian bahawa apabila melakukan perlawanan pada keseluruhan tatasusunan, seperti
${pelbagai#pola}, atau penggantian global, seperti ${param//tepuk/pengganti}, hanya
data untuk perlawanan terakhir masih tersedia. Dalam kes penggantian global ini
mungkin masih berguna. Lihat contoh untuk m bendera di bawah.
Penomboran rujukan belakang dengan ketat mengikut susunan pembukaan
kurungan dari kiri ke kanan dalam rentetan corak, walaupun set kurungan
mungkin bersarang. Terdapat peraturan khas untuk kurungan diikuti dengan `#' atau `##'.
Hanya padanan terakhir kurungan yang diingati: sebagai contoh, dalam `[[ abab =
(#b)([ab])# ]]', hanya yang terakhir `b' disimpan dalam perlawanan[1]. Oleh itu kurungan tambahan
mungkin diperlukan untuk memadankan segmen lengkap: contohnya, gunakan `X((ab|cd)#)Y'ke
padankan keseluruhan rentetan sama ada `ab' atau `cd' antara `X' dan `Y', menggunakan nilai
$match[1] daripada $match[2].
Jika padanan gagal tiada satu pun daripada parameter diubah, jadi dalam beberapa kes ia mungkin berlaku
perlu untuk memulakannya terlebih dahulu. Jika beberapa rujukan belakang gagal
padanan -- yang berlaku jika ia berada di cawangan ganti yang gagal dipadankan, atau
jika mereka diikuti oleh # dan dipadankan sifar kali -- kemudian rentetan yang dipadankan ditetapkan
kepada rentetan kosong, dan indeks mula dan akhir ditetapkan kepada -1.
Padanan corak dengan rujukan belakang adalah perlahan sedikit berbanding tanpa.
B Nyahaktifkan rujukan belakang, menafikan kesan daripada b bendera sejak itu.
cN,M Bendera (#cN,M) boleh digunakan di mana-mana sahaja yang # or ## operator boleh digunakan kecuali
dalam ungkapan `(*/)#' dan `(*/)##' dalam penjanaan nama fail, di mana `/' telah
makna istimewa; ia tidak boleh digabungkan dengan bendera globbing lain dan corak yang buruk
ralat berlaku jika ia salah letak. Ia bersamaan dengan borang {N,M} secara berkala
ungkapan. Watak atau kumpulan sebelumnya diperlukan untuk memadankan antara N and M
kali, termasuk. Borang (#cN) memerlukan dengan tepat N mancis; (#c,M) adalah setaraf
untuk menentukan N sebagai 0; (#cN,) menyatakan bahawa tiada had maksimum pada bilangan
perlawanan.
m Tetapkan rujukan kepada data padanan untuk keseluruhan rentetan yang dipadankan; ini serupa dengan
rujukan belakang dan tidak berfungsi dalam penjanaan nama fail. Bendera mesti ada
kesan pada penghujung corak, iaitu bukan setempat kepada kumpulan. Parameter $MATCH,
$MBEGIN and $MEND akan ditetapkan kepada rentetan yang dipadankan dan kepada indeks
permulaan dan akhir rentetan, masing-masing. Ini paling berguna dalam parameter
penggantian, kerana sebaliknya rentetan yang dipadankan adalah jelas.
Sebagai contoh,
arr=(veldt jynx geram wakaf zho wang)
cetak ${arr//(#m)[aeiou]/${(U)PERLAWANAN}}
memaksa semua padanan (iaitu semua vokal) menjadi huruf besar, mencetak `vEldt jynx
grImps wakaf zhO buck'.
Tidak seperti rujukan belakang, tiada penalti kelajuan untuk menggunakan rujukan perlawanan, lain-lain
daripada penggantian tambahan yang diperlukan untuk rentetan penggantian dalam kes seperti
contoh yang ditunjukkan.
M Nyahaktifkan m bendera, oleh itu tiada rujukan kepada data yang sepadan akan dibuat.
anum Anggaran padanan: num ralat dibenarkan dalam rentetan yang dipadankan dengan corak.
Peraturan untuk ini diterangkan dalam subseksyen seterusnya.
s, e Tidak seperti bendera lain, ini hanya mempunyai kesan tempatan, dan setiap satu mesti muncul padanya
sendiri: `(#s)' dan `(#e)' adalah satu-satunya borang yang sah. `(#s)' bendera berjaya hanya pada
permulaan rentetan ujian, dan `(#e)' bendera berjaya hanya pada penghujung
rentetan ujian; mereka sepadan dengan `^' dan `$' dalam ungkapan biasa standard. mereka
berguna untuk memadankan segmen laluan dalam corak selain daripada dalam nama fail
penjanaan (di mana segmen laluan dalam apa jua keadaan dirawat secara berasingan). Sebagai contoh,
`*((#s)|/)ujian((#e)|/)*' sepadan dengan segmen laluan `ujian' dalam mana-mana yang berikut
rentetan: ujian, ujian / pada / mula, pada/akhir/ujian, dalam/ujian/tengah.
Penggunaan lain adalah dalam penggantian parameter; contohnya `${array/(#s)A*Z(#e)}' kehendak
keluarkan hanya elemen tatasusunan yang sepadan dengan corak lengkap `A*Z'. Disana ada
cara lain untuk melaksanakan banyak operasi jenis ini, walau bagaimanapun gabungan
operasi penggantian `/' dan `//' dengan `(#s)' dan `(#e)' bendera menyediakan
satu kaedah yang mudah dan tidak dapat dilupakan.
Ambil perhatian bahawa penegasan borang `(^(#s))' juga bekerja, iaitu perlawanan di mana-mana kecuali di
permulaan rentetan, walaupun ini sebenarnya bermaksud `apa-apa sahaja kecuali a
bahagian panjang sifar pada permulaan rentetan'; anda perlu menggunakan `(""~(#s))'ke
padankan bahagian sifar panjang rentetan bukan pada permulaan.
q A `q' dan segala-galanya sehingga kurungan penutup bendera globbing adalah
diabaikan oleh kod padanan corak. Ini bertujuan untuk menyokong penggunaan glob
kelayakan, lihat di bawah. Hasilnya ialah corak `(#b)(*).c(#q.)' boleh digunakan
kedua-duanya untuk globbing dan untuk memadankan dengan rentetan. Dalam kes terdahulu, yang
`(#q.)' akan dianggap sebagai kelayakan glob dan `(#b)' tidak akan berguna,
manakala dalam kes kedua `(#b)' berguna untuk rujukan belakang dan `(#q.)'
akan diabaikan. Ambil perhatian bahawa pengubah bertindih dalam kelayakan glob juga tidak
digunakan dalam padanan corak biasa.
u Hormati tempat semasa dalam menentukan kehadiran aksara multibait dalam a
corak, dengan syarat shell telah disusun dengan MULTIBYTE_SOKONGAN. Ini mengatasi
yang MULTIBYTE pilihan; tingkah laku lalai diambil daripada pilihan. Bandingkan U.
(Mnemonik: biasanya aksara multibait adalah daripada Unicode dalam pengekodan UTF-8,
walaupun sebarang sambungan ASCII yang disokong oleh perpustakaan sistem boleh digunakan.)
U Semua aksara dianggap sebagai satu bait panjang. Bertentangan dengan u. ini
mengatasi MULTIBYTE pilihan.
Sebagai contoh, rentetan ujian foxx boleh dipadankan dengan corak (#i)FOOXX, tetapi bukan oleh
(#l)FOOXX, (#i)FOO(#I)XX or ((#i)FOOX)X. Rentetan itu (#ia2)readme menyatakan
padanan tidak sensitif huruf besar-besaran bagi readme dengan sehingga dua ralat.
Apabila menggunakan sintaks ksh untuk mengumpulkan kedua-duanya KSH_GLOB and EXTENDED_GLOB mesti ditetapkan dan
kurungan kiri hendaklah didahului dengan @. Perhatikan juga bahawa bendera tidak menjejaskan huruf
di dalam [...] kumpulan, dengan kata lain (#i)[az] masih sepadan dengan huruf kecil sahaja.
Akhir sekali, ambil perhatian bahawa apabila memeriksa keseluruhan laluan secara tidak peka huruf besar-kecil setiap direktori mestilah
mencari semua fail yang sepadan, supaya corak borang (#i)/foo/bar/... is
berpotensi perlahan.
Anggaran Pemadanan
Apabila memadankan kira-kira, shell menyimpan kiraan ralat yang ditemui, yang tidak boleh
melebihi bilangan yang dinyatakan dalam (#anum) bendera. Empat jenis ralat diiktiraf:
1. Watak yang berbeza, seperti dalam foxbar and fooybar.
2. Transposisi aksara, seperti dalam pisang and abnana.
3. Satu aksara tiada dalam rentetan sasaran, seperti dengan corak jalan raya dan sasaran
rentetan rod.
4. Watak tambahan yang muncul dalam rentetan sasaran, seperti dengan dapur and berusaha.
Oleh itu, corak (#a3)abcd perlawanan dcba, dengan ralat yang berlaku dengan menggunakan yang pertama
peraturan dua kali dan yang kedua sekali, mengumpulkan rentetan sebagai [d][cb][a] and [a][bc][d].
Bahagian bukan literal pada corak mesti sepadan dengan tepat, termasuk aksara dalam watak
julat: oleh itu (#a1)??? memadankan rentetan panjang empat, dengan menggunakan peraturan 4 pada kosong
sebahagian daripada corak, tetapi bukan rentetan panjang dua, kerana semua ? mesti sepadan. Lain-lain
aksara yang mesti sepadan dengan tepat ialah titik awal dalam nama fail (melainkan GLOB_DOTS
pilihan ditetapkan), dan semua garis miring dalam nama fail, supaya a/bc adalah dua kesilapan daripada ab/c (Yang
slash tidak boleh ditukar dengan aksara lain). Begitu juga, ralat dikira
secara berasingan untuk rentetan tidak bersebelahan dalam corak, supaya (ab|cd)ef adalah dua kesilapan daripada
aebf.
Apabila menggunakan pengecualian melalui ~ operator, pemadanan anggaran dilayan sepenuhnya
secara berasingan untuk bahagian yang dikecualikan dan mesti diaktifkan secara berasingan. Oleh itu,
(#a1)BACA SAYA~BACA_SAYA perlawanan BACA SAYA tetapi tidak BACA SAYA, sebagai jejak BACA SAYA dipadankan
tanpa anggaran. Walau bagaimanapun, (#a1)README~(#a1)READ_ME tidak sepadan dengan mana-mana corak
borang BACA?ME kerana semua borang tersebut kini dikecualikan.
Selain daripada pengecualian, terdapat hanya satu kiraan ralat keseluruhan; bagaimanapun, ralat maksimum
dibenarkan boleh diubah secara tempatan, dan ini boleh dihadkan dengan pengelompokan. Sebagai contoh,
(#a1)kucing((#a0)anjing)musang membenarkan satu ralat secara keseluruhan, yang mungkin tidak berlaku dalam anjing seksyen,
dan corak (#a1)kucing(#a0)anjing(#a1)musang adalah setara. Perhatikan bahawa titik di mana an
ralat pertama kali ditemui adalah yang penting untuk menentukan sama ada untuk menggunakan anggaran; untuk
contohnya, (#a1)abc(#a0)xyz tidak akan sepadan abcdxyz, kerana ralat berlaku pada `x',
di mana anggaran dimatikan.
Keseluruhan segmen laluan mungkin dipadankan lebih kurang, supaya
`(#a1)/foo/d/is/available/at/the/bar' membenarkan satu ralat dalam mana-mana segmen laluan. Ini banyak
kurang cekap berbanding tanpa (#a1), bagaimanapun, kerana setiap direktori dalam laluan mestilah
diimbas untuk kemungkinan padanan anggaran. Adalah lebih baik untuk meletakkan (#a1) selepas mana-mana laluan
segmen yang diketahui betul.
Rekursif Melompat
Komponen nama laluan bagi borang `(foo/)#' sepadan dengan laluan yang terdiri daripada sifar atau lebih
direktori yang sepadan dengan corak foo.
Sebagai ringkasan, `** /' adalah bersamaan dengan `(*/)#'; ambil perhatian bahawa ini oleh itu sepadan dengan fail dalam
direktori semasa serta subdirektori. Oleh itu:
ls (*/)#bar
or
ls **/bar
melakukan carian direktori rekursif untuk fail bernama `bar' (berpotensi termasuk fail
`bar' dalam direktori semasa). Borang ini tidak mengikut pautan simbolik; yang
bentuk alternatif `*** /' tidak, tetapi sebaliknya sama. Kedua-duanya tidak boleh
digabungkan dengan bentuk globbing lain dalam segmen laluan yang sama; dalam kes itu, `*'
pengendali kembali kepada kesan biasa mereka.
Glob Kelayakan
Corak yang digunakan untuk penjanaan nama fail mungkin berakhir dengan senarai kelayakan yang disertakan
kurungan. Kelayakan menentukan nama fail yang sebaliknya sepadan dengan yang diberikan
corak akan disisipkan dalam senarai argumen.
Jika pilihan BARE_GLOB_QUAL ditetapkan, kemudian set kurungan mengekor yang mengandungi tidak `|'
atau `(' aksara (atau `~' jika ia istimewa) diambil sebagai satu set kelayakan glob. Sebuah glob
subungkapan yang biasanya akan diambil sebagai kelayakan glob, contohnya `(^x)', boleh jadi
terpaksa dianggap sebagai sebahagian daripada corak glob dengan menggandakan kurungan, dalam kes ini
menghasilkan `((^x))'.
Jika pilihan EXTENDED_GLOB ditetapkan, sintaks berbeza untuk kelayakan glob tersedia,
iaitu `(#qx)' mana x ialah mana-mana kelayakan glob yang sama digunakan dalam format lain. The
kelayakan masih mesti muncul di penghujung corak. Walau bagaimanapun, dengan sintaks ini
beberapa kelayakan glob mungkin dirantai bersama. Mereka dianggap sebagai logik DAN daripada
set bendera individu. Juga, kerana sintaksnya tidak jelas, ungkapan itu akan menjadi
dianggap sebagai kelayakan glob selagi mana-mana kurungan yang terkandung di dalamnya seimbang;
penampilan `|', `(' atau `~' tidak menafikan kesannya. Ambil perhatian bahawa kelayakan akan menjadi
diiktiraf dalam bentuk ini walaupun jika kelayakan glob kosong wujud pada penghujung corak,
contohnya `*(#q*)(.)' akan mengenali fail biasa boleh laku jika kedua-dua pilihan ditetapkan;
bagaimanapun, sintaks campuran mungkin harus dielakkan demi kejelasan. Perhatikan bahawa
dalam keadaan menggunakan `[[' membentuk kehadiran ungkapan dalam kurungan (#q...)
pada penghujung rentetan menunjukkan bahawa globbing harus dilakukan; ungkapan mungkin
termasuk kelayakan glob, tetapi ia juga sah jika ia mudah (#q). Ini tidak terpakai
ke sebelah kanan operator padanan corak kerana sintaks sudah mempunyai khas
kepentingan.
Pelayakkan mungkin salah satu daripada yang berikut:
/ direktori
F direktori `penuh' (iaitu tidak kosong). Perhatikan bahawa pengertian yang bertentangan (^F) mengembang ke
direktori kosong dan semua bukan direktori. guna (/^F) untuk direktori kosong.
. fail biasa
@ pautan simbolik
= soket
p paip bernama (FIFO)
* fail biasa boleh laku (0100 atau 0010 atau 0001)
% fail peranti (watak atau blok khas)
%b menyekat fail khas
%c fail khas aksara
r fail boleh dibaca pemilik (0400)
w fail boleh ditulis pemilik (0200)
x fail boleh laku pemilik (0100)
A fail boleh dibaca kumpulan (0040)
I fail boleh tulis kumpulan (0020)
E fail boleh laku kumpulan (0010)
R fail boleh dibaca dunia (0004)
W fail boleh tulis dunia (0002)
X fail boleh laku dunia (0001)
s fail setuid (04000)
S fail setgid (02000)
t fail dengan bit melekit (01000)
fspec fail dengan padanan hak akses spec. ini spec mungkin nombor oktal secara pilihan
didahului oleh `=', sebuah `+', atau `-'. Jika tiada satu pun daripada watak ini diberikan, the
tingkah laku adalah sama seperti untuk `='. Nombor perlapanan menerangkan bit mod untuk menjadi
dijangka, jika digabungkan dengan `=', nilai yang diberikan mesti sepadan dengan mod fail
betul-betul, dengan `+', sekurang-kurangnya bit dalam nombor yang diberikan mesti ditetapkan dalam
mod fail, dan dengan `-', bit dalam nombor tidak boleh ditetapkan. Memberi `?'
bukannya digit perlapanan di mana-mana dalam nombor memastikan bahawa bit yang sepadan
dalam mod fail tidak disemak, ini hanya berguna dalam kombinasi dengan `='.
Jika kelayakan `f' diikuti oleh mana-mana watak lain apa sahaja sehingga seterusnya
aksara yang sepadan (`[', `{', dan `<' perlawanan `]', `}', dan `>' masing-masing, mana-mana
padanan watak lain itu sendiri) diambil sebagai senarai yang dipisahkan koma sub-spesifikasis.
setiap sub-spesifikasi mungkin sama ada nombor perlapanan seperti yang diterangkan di atas atau senarai mana-mana
watak-watak `u', `g', `o', dan `a', diikuti dengan `=', sebuah `+', atau `-', diikuti
dengan senarai mana-mana aksara `r', `w', `x', `s', dan `t', atau digit perlapanan.
Senarai pertama aksara menyatakan hak akses mana yang akan disemak. Sekiranya
`u' diberikan, mereka untuk pemilik fail digunakan, jika `g' diberikan, mereka daripada
kumpulan itu diperiksa, a `o' bermaksud untuk menguji pengguna lain, dan `a' kata
untuk menguji ketiga-tiga kumpulan. `=', `+', dan `-' sekali lagi mengatakan bagaimana mod itu akan menjadi
disemak dan mempunyai maksud yang sama seperti yang diterangkan untuk bentuk pertama di atas. Yang kedua
senarai aksara akhirnya menyatakan hak akses mana yang diharapkan: `r'untuk
akses baca, `w' untuk akses tulis, `x' untuk hak untuk melaksanakan fail (atau untuk
cari direktori), `s' untuk bit setuid dan setgid, dan `t' untuk yang melekit
sedikit.
Justeru, `*(f70?)' memberikan fail yang pemiliknya telah membaca, menulis dan melaksanakan
kebenaran, dan yang mana ahli kumpulan lain tidak mempunyai hak, bebas daripada
kebenaran untuk pengguna lain. Corak `*(f-100)' memberikan semua fail yang
pemilik tidak mempunyai kebenaran melaksanakan, dan `*(f:gu+w,o-rx:)' memberikan fail untuk
yang mana pemilik dan ahli kumpulan yang lain mempunyai sekurang-kurangnya kebenaran menulis,
dan yang pengguna lain tidak mempunyai kebenaran membaca atau melaksanakan.
erentetan
+cmd . rentetan akan dilaksanakan sebagai kod shell. Nama fail akan dimasukkan ke dalam
senaraikan jika dan hanya jika kod mengembalikan status sifar (biasanya status yang terakhir
perintah).
Dalam bentuk pertama, aksara pertama selepas `e' akan digunakan sebagai pemisah
dan apa-apa sahaja sehingga pemisah sepadan seterusnya akan diambil sebagai rentetan; `[',
`{', dan `<' perlawanan `]', `}', dan `>', masing-masing, manakala mana-mana watak lain
sepadan dengan dirinya sendiri. Ambil perhatian bahawa pengembangan mesti disebut dalam rentetan untuk menghalang mereka
daripada dikembangkan sebelum globbing dilakukan. rentetan kemudian dilaksanakan sebagai shell
kod. Rentetan itu globqual dilampirkan pada tatasusunan zsh_eval_context jangka masa
daripada pelaksanaan.
Semasa pelaksanaan rentetan nama fail yang sedang diuji tersedia dalam
parameternya MEMBUAT; parameter boleh diubah kepada rentetan untuk dimasukkan ke dalam
senarai dan bukannya nama fail asal. Di samping itu, parameter membalas mungkin
ditetapkan kepada tatasusunan atau rentetan, yang mengatasi nilai MEMBUAT. Jika ditetapkan kepada an
tatasusunan, yang terakhir dimasukkan ke dalam baris arahan perkataan demi perkataan.
Sebagai contoh, katakan direktori mengandungi satu fail `kesepian'. Kemudian
ungkapan `*(e:'reply=(${REPLY}{1,2})':)' akan menyebabkan perkataan `sunyi1'dan
`sunyi2' untuk dimasukkan ke dalam baris arahan. Perhatikan petikan daripada rentetan.
Borang +cmd mempunyai kesan yang sama, tetapi tiada pembatas muncul di sekeliling cmd. Sebaliknya,
cmd diambil sebagai urutan terpanjang bagi aksara berikutan + yang
alfanumerik atau garis bawah. Lazimnya cmd akan menjadi nama fungsi shell
yang mengandungi ujian yang sesuai. Sebagai contoh,
nt() { [[ $ BALAS -nt $NTREF ]] }
NTREF=fail semula
ls -l *(+nt)
menyenaraikan semua fail dalam direktori yang telah diubah suai lebih baru daripada
fail semula.
ddev fail pada peranti dev
l[-|+]ct
fail yang mempunyai kiraan pautan kurang daripada ct (-), lebih besar daripada ct (+), atau sama dengan ct
U fail yang dimiliki oleh ID pengguna yang berkesan
G fail yang dimiliki oleh ID kumpulan berkesan
uid fail yang dimiliki oleh ID pengguna id jika itu adalah nombor. Jika tidak, id menentukan pengguna
nama: watak selepas `u' akan diambil sebagai pemisah dan rentetan
antaranya dan pemisah sepadan seterusnya akan diambil sebagai nama pengguna. The
pemisah permulaan `[', `{', dan `<' padankan pemisah akhir `]', `}', dan `>',
masing-masing; mana-mana watak lain sepadan dengan dirinya. Fail yang dipilih adalah mereka
dimiliki oleh pengguna ini. Contohnya, `u:foo:' atau `u[foo]' memilih fail yang dimiliki oleh pengguna
`foo'.
gid seperti uid tetapi dengan ID kumpulan atau nama
a[Mwhms][-|+]n
fail diakses dengan tepat n hari yang lalu. Fail diakses dalam masa yang terakhir n hari adalah
dipilih menggunakan nilai negatif untuk n (-n). Fail diakses lebih daripada n hari yang lalu
dipilih secara positif n nilai (+n). Penentu unit pilihan `M', `w', `h',
`m' atau `s' (cth `ah5') menyebabkan pemeriksaan dilakukan dengan bulan (30 hari),
minggu, jam, minit atau saat dan bukannya hari, masing-masing. Satu ` eksplisitd'
berhari-hari pun boleh.
Mana-mana bahagian pecahan perbezaan antara masa capaian dan bahagian semasa
dalam unit yang sesuai diabaikan dalam perbandingan. Sebagai contoh, `echo
*(ah-5)' akan menggemakan fail yang diakses dalam tempoh lima jam yang lalu, manakala `echo *(ah+5)'
akan menggemakan fail yang diakses sekurang-kurangnya enam jam yang lalu, mengikut masa antara lima
dan enam jam dianggap sebagai lima jam.
m[Mwhms][-|+]n
seperti kelayakan akses fail, kecuali ia menggunakan masa pengubahsuaian fail.
c[Mwhms][-|+]n
seperti kelayakan akses fail, kecuali ia menggunakan masa perubahan inode fail.
L[+|-]n
fail kurang daripada n bait (-), lebih daripada n bait (+), atau betul-betul n bait panjangnya.
Jika bendera ini terus diikuti oleh a saiz penentu `k' (`K'), `m' (`M'), atau `p'
(`P') (cth `Lk-50') semakan dilakukan dengan kilobait, megabait atau blok
(daripada 512 bait) sebaliknya. (Pada sesetengah sistem, penentu tambahan tersedia untuk
gigabait, `g' atau `G', dan terabait, `t' atau `T'.) Jika penentu saiz digunakan a
fail dianggap sebagai "tepat" saiz jika saiz fail dibundarkan ke unit seterusnya
adalah sama dengan saiz ujian. Justeru `*(Lm1)' memadankan fail dari 1 bait hingga 1
Megabait termasuk. Ambil perhatian juga bahawa set fail "kurang daripada" saiz ujian sahaja
termasuk fail yang tidak sepadan dengan ujian kesaksamaan; oleh itu `*(Lm-1)' hanya sepadan
fail bersaiz sifar.
^ menafikan semua kelayakan yang mengikutinya
- bertukar-tukar antara membuat kelayakan berfungsi pada pautan simbolik (lalai) dan
fail yang mereka tunjuk
M menetapkan MARK_DIRS pilihan untuk corak semasa
T menambahkan tanda kelayakan mengekor pada nama fail, sama dengan LIST_TYPES
pilihan, untuk corak semasa (overrides M)
N menetapkan NULL_GLOB pilihan untuk corak semasa
D menetapkan GLOB_DOTS pilihan untuk corak semasa
n menetapkan NUMERIC_GLOB_SORT pilihan untuk corak semasa
Yn membolehkan mod litar pintas: corak akan berkembang kepada paling banyak n nama fail. Jika
lebih daripada n perlawanan wujud, hanya yang pertama n padanan dalam susunan lintasan direktori
Akan dipertimbangkan.
menyiratkan oN apabila tidak oc kelayakan digunakan.
oc menentukan cara nama fail harus diisih. Jika c is n mereka disusun mengikut
nama; jika ia adalah L ia diisih bergantung pada saiz (panjang) fail; jika l
ia disusun mengikut bilangan pautan; jika a, m, Atau c mereka disusun mengikut masa
akses terakhir, pengubahsuaian, atau perubahan inod masing-masing; jika d, fail dalam
subdirektori muncul sebelum mereka dalam direktori semasa pada setiap peringkat
carian -- ini paling baik digabungkan dengan kriteria lain, contohnya `odon' untuk menyusun semula
nama untuk fail dalam direktori yang sama; jika N, tiada pengisihan dilakukan. Catatan
Bahawa a, m, dan c bandingkan umur dengan masa semasa, maka nama pertama dalam
senarai adalah fail termuda. Juga ambil perhatian bahawa pengubahsuai ^ and - digunakan, jadi
`*(^-oL)' memberikan senarai semua fail yang disusun mengikut saiz fail dalam susunan menurun,
mengikuti sebarang pautan simbolik. Kecuali oN digunakan, penentu pesanan berbilang boleh
berlaku untuk menyelesaikan hubungan.
Pengisihan lalai ialah n (dengan nama) melainkan jika Y kelayakan glob digunakan, di mana
kes itu N (tidak disusun).
oe and o+ adalah kes-kes khas; mereka masing-masing diikuti oleh kod shell, dihadkan seperti untuk
yang e kelayakan glob dan + kelayakan glob masing-masing (lihat di atas). Kod itu
dilaksanakan untuk setiap fail yang dipadankan dengan parameter MEMBUAT ditetapkan kepada nama
fail pada entri dan globsort dilampirkan kepada zsh_eval_context. Kod harus diubah suai
parameternya MEMBUAT dalam beberapa fesyen. Sebagai balasan, nilai parameter digunakan
bukannya nama fail sebagai rentetan untuk diisih. Tidak seperti jenis lain
pengendali, oe and o+ boleh diulang, tetapi ambil perhatian bahawa bilangan maksimum jenis
pengendali apa-apa jenis yang mungkin muncul dalam sebarang ekspresi glob ialah 12.
Oc seperti `o', tetapi disusun mengikut tertib menurun; iaitu `*(^oc)' adalah sama dengan `*(Oc)'dan
`*(^Oc)' adalah sama dengan `*(oc)'; `Od' meletakkan fail dalam direktori semasa sebelum ini
mereka dalam subdirektori pada setiap peringkat carian.
[mohon[,akhir]]
menentukan nama fail yang dipadankan yang harus disertakan dalam senarai yang dikembalikan.
Sintaks adalah sama seperti subskrip tatasusunan. mohon dan pilihan akhir mungkin
ungkapan matematik. Seperti dalam melanggan parameter mereka mungkin negatif untuk dibuat
mereka mengira dari perlawanan terakhir ke belakang. Cth: `*(-OL[1,3])' memberikan senarai
nama tiga fail terbesar.
Prentetan
. rentetan akan ditambah pada setiap perlawanan glob sebagai perkataan yang berasingan. rentetan is
dibatasi dengan cara yang sama seperti hujah kepada e kelayakan glob yang diterangkan di atas.
Kelayakan boleh diulang; perkataan di tambah secara berasingan supaya
baris arahan yang terhasil mengandungi perkataan dalam susunan yang sama yang diberikan dalam
senarai kelayakan glob.
Penggunaan biasa untuk ini adalah untuk menambahkan pilihan sebelum semua kejadian fail
nama; sebagai contoh, corak `*(P:-f:)' menghasilkan hujah baris arahan `-f
file1 -f file2 ... '
Jika pengubahsuai ^ aktif, maka rentetan akan dilampirkan dan bukannya ditambah.
Prapending dan penambahan dilakukan secara berasingan supaya kedua-duanya boleh digunakan pada glob yang sama
ungkapan; contohnya dengan menulis `*(P:foo:^P:bar:^P:baz:)' yang menghasilkan
hujah baris arahan `foo asas file1 bar ... '
Lebih daripada satu senarai ini boleh digabungkan, dipisahkan dengan koma. Keseluruhan senarai sepadan
jika sekurang-kurangnya satu daripada subsenarai sepadan (ia `atau'ed, kelayakan dalam subsenarai
adalah `dan'ed). Sesetengah kelayakan, bagaimanapun, menjejaskan semua perlawanan yang dijana, bebas daripada
subsenarai di mana ia diberikan. Ini adalah kelayakan `M', `T', `N', `D', `n', `o',
`O' dan subskrip yang diberikan dalam kurungan (`[...]').
Jika `:' muncul dalam senarai kelayakan, baki ungkapan dalam kurungan ialah
ditafsirkan sebagai pengubah (lihat bahagian `Pengubah' dalam bahagian `Sejarah
Pengembangan'). Setiap pengubah suai mesti diperkenalkan oleh ` yang berasingan:'. Perhatikan juga bahawa
hasil selepas pengubahsuaian tidak semestinya fail sedia ada. Nama mana-mana yang sedia ada
fail boleh diikuti oleh pengubah bentuk `(:...)' walaupun tiada nama fail sebenar
generasi dilakukan, walaupun ambil perhatian bahawa kehadiran kurungan menyebabkan
keseluruhan ungkapan untuk tertakluk kepada sebarang pilihan padanan corak global seperti
NULL_GLOB. Oleh itu:
ls *(-/)
menyenaraikan semua direktori dan pautan simbolik yang menghala ke direktori, dan
ls *(-@)
menyenaraikan semua pautan simbolik yang rosak, dan
ls *(%W)
menyenaraikan semua fail peranti boleh tulis dunia dalam direktori semasa, dan
ls *(W,X)
menyenaraikan semua fail dalam direktori semasa yang boleh ditulis dunia atau boleh laku dunia, dan
echo /tmp/foo*(u0^@:t)
mengeluarkan nama asas semua fail milik akar bermula dengan rentetan `foo' dalam / tmp,
mengabaikan symlinks, dan
ls *.*~(lex|parse).[ch](^D^l1)
menyenaraikan semua fail yang mempunyai kiraan pautan satu yang namanya mengandungi titik (tetapi bukan fail tersebut
bermula dengan titik, sejak GLOB_DOTS dimatikan secara eksplisit) kecuali untuk lex.c, lex.h,
menghurai.c and menghurai.h.
cetak b*.pro(#q:s/pro/shmo/)(#q.:s/builtin/shmiltin/)
menunjukkan cara pengubah suai kolon dan kelayakan lain boleh dirantai bersama. The
kelayakan biasa `.' digunakan dahulu, kemudian pengubah suai kolon mengikut urutan dari kiri ke
betul. Jadi kalau EXTENDED_GLOB ditetapkan dan corak asas sepadan dengan fail biasa
builtin.pro, cangkerang akan mencetak `shmiltin.shmo'.
Gunakan zshexpn dalam talian menggunakan perkhidmatan onworks.net