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