Что двойное режет средний в '$ {f///_}'?

Я изучаю Bash, и я хочу заменить пробелы другой "не пустые" символы. Я использую a for цикл:

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

Мой вопрос, почему находятся двойная наклонная черта и пространство в ${f// /_}? Что делает ${f// /_} ?

18
задан 15 March 2016 в 07:54

2 ответа

Это шаблон замены с использованием расширения параметра bash .

В $ {f // / _} :

  • ] Двойная косая черта // предназначена для замены всех пробелов на _ , если вы поставите одну косую черту / , будет заменен только первый пробел

  • Пробел есть потому, что вы заменяете пробел (с подчеркиванием)

Итак, в основном шаблон:

${parameter//find/replace}

Проверьте man bash , чтобы получить больше информации.

Чтобы добраться до ] Раздел расширения параметра man bash сразу:

LESS=+/'Parameter Expansion' man bash
20
ответ дан 23 November 2019 в 02:23

Раздел "{f // / _} означает замену каждое пробел с и подчеркиванием. Это использует расширение параметра Bash, переменная f , определенная в для f в * \ *; , будет выполняться для каждого совпадения расширения оболочки (подстановки). Каждый раз найденное имя файла будет иметь значение $ f .

Расширение параметра работает с // , что означает каждое вхождение символа, следующего за // (пробел в этом примере) следует заменить символом после / (подчеркивание в этом примере).

4
ответ дан 23 November 2019 в 02:23

Другие вопросы по тегам:

Похожие вопросы: