Я изучаю Bash, и я хочу заменить пробелы другой "не пустые" символы. Я использую a for
цикл:
for f in *\ *; do mv "$f" "${f// /_}"; done
Мой вопрос, почему находятся двойная наклонная черта и пространство в ${f// /_}
? Что делает ${f// /_}
?
Это шаблон замены с использованием расширения параметра bash
.
В $ {f // / _}
:
] Двойная косая черта //
предназначена для замены всех пробелов на _
, если вы поставите одну косую черту /
, будет заменен только первый пробел
Пробел есть потому, что вы заменяете пробел (с подчеркиванием)
Итак, в основном шаблон:
${parameter//find/replace}
Проверьте man bash
, чтобы получить больше информации.
Чтобы добраться до ] Раздел
расширения параметра man bash
сразу:
LESS=+/'Parameter Expansion' man bash
Раздел "{f // / _}
означает замену каждое пробел с и подчеркиванием.
Это использует расширение параметра Bash, переменная f
, определенная в для f в * \ *;
, будет выполняться для каждого совпадения расширения оболочки (подстановки). Каждый раз найденное имя файла будет иметь значение $ f
.
Расширение параметра работает с //
, что означает каждое вхождение символа, следующего за //
(пробел в этом примере) следует заменить символом после /
(подчеркивание в этом примере).