Apa yang terjadi
Shell (bash) melihat argumennya [a-z]. Itu adalah pola wildcard ( gabus ), yang cocok dengan huruf kecil apa pun¹. Karenanya shell mencari nama file yang cocok dengan pola ini. Ada tiga kasus:
- Tidak ada file di direktori saat ini memiliki nama yang huruf kecil. Kemudian shell meninggalkan pola wildcard tidak berubah, dan
trmelihat argumen -ddan [a-z]. Inilah yang terjadi pada sebagian besar mesin Anda.
- Satu file dalam direktori saat ini memiliki nama yang merupakan huruf kecil. Kemudian shell memperluas pola ke nama file ini, dan
trmelihat argumen -ddan nama file. Ini terjadi di server, dan file yang cocok dipanggil okarena kita dapat melihat bahwa trmenghapus surat itu o.
- Dua atau lebih file dalam direktori saat ini memiliki nama yang huruf kecil. Kemudian shell memperluas pola ke daftar nama file yang cocok, dan
trmelihat tiga argumen atau lebih: -ddan nama file. Karena trmengharapkan satu argumen setelahnya -d, itu akan mengeluh.
Apa yang seharusnya Anda lakukan
Jika ada karakter khusus dalam argumen perintah, Anda harus menghindarinya. Letakkan argumen dalam tanda kutip tunggal '…'(ini adalah cara paling sederhana, ada yang lain). Di dalam kutipan tunggal, semua karakter berdiri sendiri kecuali kutipan tunggal itu sendiri. Jika ada satu kutipan di dalam argumen, gantilah dengan'\'' .
tr -d '[a-z]'
Namun perhatikan bahwa ini mungkin masih bukan yang Anda maksudkan! Ini memberitahu Anda truntuk menghapus huruf kecil dan tanda kurung. Ini setara dengan tr -d ']a-z[', tr '[]a-z', dll Untuk menghapus huruf kecil, gunakan
tr -d a-z
Argumen untuk tradalah serangkaian karakter. Anda menempatkan tanda kurung di sekitar set karakter dalam ekspresi reguler atau pola wildcard untuk menunjukkan bahwa itu adalah set karakter. Tetapi trbekerja pada satu karakter pada satu waktu. Argumen baris perintahnya adalah apa yang Anda masukkan ke dalam tanda kurung .
Anda memang membutuhkan tanda kurung untuk menunjukkan kelas karakter . Dalam ekspresi reguler, Anda menggunakan tanda kurung di dalam tanda kurung untuk menunjukkan kelas karakter, misalnya [[:lower:]]*cocok dengan sejumlah huruf kecil, [[:lower:]_]*cocok dengan sejumlah huruf kecil dan garis bawah. Dalam argumen tr, Anda memerlukan set tanpa tanda kurung di sekitarnya, jadi tr -d '[:lower:]'hapus huruf kecil, tr -d '[:lower:]_'hapus huruf kecil dan garis bawah, dll.
¹ Di beberapa tempat mungkin cocok dengan karakter lain .
trrentang ditulis tanpa melampirkan[...]. Jaditr -d '[a-z]'akan membunuha-z, dan juga karakter[dan]. Gunakantr -d a-zuntuk membunuh hanya surata-z.