Saya sedang belajar Bash, dan saya ingin mengganti karakter spasi dengan karakter "non blank" lainnya. Saya menggunakan for
loop:
for f in *\ *; do mv "$f" "${f// /_}"; done
Pertanyaan saya adalah, mengapa slash ganda dan spasi ${f// /_}
? Apa yang ${f// /_}
harus dilakukan
Jawaban:
Itulah pola penggantian menggunakan
bash
ekspansi parameter.Dalam
${f// /_}
:Garis miring ganda
//
adalah untuk mengganti semua kemunculan ruang dengan_
, jika Anda menempatkan satu garis miring/
, hanya ruang pertama yang akan digantiRuang ada di sana karena Anda mengganti ruang (dengan garis bawah)
Jadi polanya pada dasarnya adalah:
Periksa
man bash
untuk mendapatkan lebih banyak ide.Untuk sampai ke
Parameter Expansion
bagianman bash
sekaligus:sumber
Bagian ini
"{f// /_}
berarti mengganti setiap ruang dengan dan garis bawah. Ini menggunakan ekspansi parameter Bash, variabel yangf
ditentukan dalamfor f in *\ *;
akan dijalankan untuk setiap pertandingan ekspansi shell (globbing). Setiap kali nama file ditemukan akan menjadi nilai$f
.Ekspansi parameter berfungsi dengan
//
arti setiap kemunculan karakter berikut//
(spasi dalam contoh ini), harus diganti oleh karakter sesudahnya/
(garis bawah pada contoh ini).sumber