Çift eğik çizgi `` $ {f // / _} '' ne anlama geliyor?


18

Bash öğreniyorum ve boşluk karakterlerini diğer "boş olmayan" karakterlerle değiştirmek istiyorum. Bir fordöngü kullanıyorum :

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

Benim sorum, çift eğik çizgi ve boşluk neden ${f// /_}? Ne yapar ${f// /_}?


4
Bunu ezbere öğrenmeniz gerekmiyorsa, en azından nereden okuyacağınızı bilmelisiniz: bash kılavuzundadır .
glenn jackman

Yanıtlar:


20

Bu bashparametre genişletmeyi kullanan bir yedek modeldir .

İçinde ${f// /_}:

  • Çift eğik çizgi //, alanın tüm örneklerini değiştirmek içindir _, eğer bir eğik çizgi koyarsanız /, yalnızca ilk boşluk değiştirilir

  • Boşluk var çünkü boşluğu değiştiriyorsunuz (alt çizgi ile)

Yani desen temel olarak:

${parameter//find/replace}

Kontrol man bashfazla fikir edinmek için.

Parameter ExpansionBölümüne bir man bashkerede ulaşmak için :

LESS=+/'Parameter Expansion' man bash

3
Kısacası, küresel bir arama ve değiştirme.
glenn jackman

4

Bölüm "{f// /_}, her boşluğun ve alt çizgi ile değiştirileceği anlamına gelir. Bu, Bash parametresi genişletme kullanır , kabuk ftanımlamasının for f in *\ *;(globbing) her bir eşleşmesi için , içinde tanımlanan değişken çalıştırılır. Her defasında bulunan dosya adı değer haline gelecektir $f.

Genişletme parametresi //, izleyen karakterin //(bu örnekteki boşluk) her oluşumunun anlamı ile çalışır , sonraki karakterle değiştirilmelidir /(bu örnekte alt çizgi).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.