Я изучаю 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.
Расширение параметра работает со //значением каждого вхождения следующего символа //(пробел в этом примере), должен быть заменен символом после /(подчеркивание в этом примере).