Contohnya
Saya baru-baru ini menemukan contoh penggunaan pasang kurung kurawal {}
, dengan tidak ada di antara kurung buka dan tutup, sebagai argumen untuk perintah dan bahkan untuk pilihan mereka:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Tidak Ada Dokumentasi
Masalah saya adalah bahwa saya tidak dapat menemukan dokumentasi di Manual Bash GNU yang menjelaskan penggunaan {}
dalam konteks seperti pada contoh di atas.
Saya tidak berpikir itu adalah ekspansi parameter , karena tanda dolar harus mendahului kurung kurawal dalam ekspansi parameter seperti pada ${}
.
Ini tidak bisa menjadi ekspansi penjepit baik, karena mengambil bentuk {x..y[..incr]}
, di mana x
dan y
tidak opsional.
Itu juga tidak bisa menjadi pengelompokan perintah , karena {}
digunakan sebagai argumen.
Pertanyaan
Apa arti sepasang kawat gigi penutup
{}
, secara umum, sebagai argumen untuk perintah apa pun yang menerimanya?Di mana saya dapat menemukan dokumentasi yang menjelaskan penggunaan
{}
sebagai argumen?
{}
- artinyatargets
untuk bertindak, denganfind
perintah, ini menghapus /rm
menemukan file.Jawaban:
Kurung kurawal ini dibiarkan sendiri oleh bash; mereka milik
find
danxargs
, masing-masing, dan dijelaskan dalam halaman manual mereka.man find
man xargs
Sunting: dan di sini MENGAPA bash mengabaikan kurung kurawal itu:
man bash
Untuk penekanan: daftar harus diakhiri dengan baris baru atau titik koma .
sumber
man xargs
bahkan tidak repot-repot menjelaskan apa yang{}
sebenarnya berarti, juga penulis tidak mengarahkan (tidak ada kata pun dimaksudkan) pembaca untuk penjelasan-exec
di halaman manualfind
.xargs -Iab echo ab
; itu adalah pilihan murni yang sewenang-wenang.-I
, saya sekarang mengerti apa yang sebenarnya dilakukan opsi itu. Ya,{}
sewenang-wenang, seperti yang Anda katakan. Saya hanya bingung dengan penjelasannyaIf the replace-str argument is missing, the effect is the same as -I{}
. Jika-I
tanpa argumen sama dengan-I{}
, makacat foo | xargs -I echo {}
akan menghasilkan hasil yang sama dengan berlaricat foo | xargs -I{} echo {}
. Namun, keduanya tidak sama. Yang pertama adalah kesalahan, dan yang lebih membingungkan saya adalah pesan kesalahanxargs: {}: No such file or directory
, tapi itu hanya karena implementasi.-I
(huruf besar I) tidak dapat dijalankan tanpa argumen. Argumennya-I
adalahecho
. Ini adalah perbedaan utama antara-I
dan-i
(dan alasan -i sudah usang, karena opsi dengan argumen yang tidak diperlukan jarang dan membingungkan)