Apa arti dari slash ganda dalam `$ {f // / _}`?

17

Saya sedang belajar Bash, dan saya ingin mengganti karakter spasi dengan karakter "non blank" lainnya. Saya menggunakan forloop:

for f in *\ *; do mv "$f" "${f// /_}"; done

Pertanyaan saya adalah, mengapa slash ganda dan spasi ${f// /_}? Apa yang ${f// /_}harus dilakukan

Pretenderus
sumber
3
Jika Anda tidak perlu mempelajarinya dengan hati, Anda setidaknya harus tahu di mana membacanya: itu ada di manual bash .
glenn jackman

Jawaban:

19

Itulah pola penggantian menggunakan bashekspansi parameter.

Dalam ${f// /_}:

  • Garis miring ganda //adalah untuk mengganti semua kemunculan ruang dengan _, jika Anda menempatkan satu garis miring /, hanya ruang pertama yang akan diganti

  • Ruang ada di sana karena Anda mengganti ruang (dengan garis bawah)

Jadi polanya pada dasarnya adalah:

${parameter//find/replace}

Periksa man bashuntuk mendapatkan lebih banyak ide.

Untuk sampai ke Parameter Expansionbagian man bashsekaligus:

LESS=+/'Parameter Expansion' man bash
heemayl
sumber
2
Singkatnya, ini pencarian global dan ganti.
glenn jackman
3

Bagian ini "{f// /_}berarti mengganti setiap ruang dengan dan garis bawah. Ini menggunakan ekspansi parameter Bash, variabel yang fditentukan dalam for 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).

Arronikal
sumber