Я вивчаю 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 *\ *;заповіті, буде проходити для кожного матчу розширення оболонки (глобулювання). Кожен раз, коли знайдене ім'я файлу стане значенням $f.
Розширення параметра працює із //значенням кожного наступного символу, що слідує //(пробіл у цьому прикладі), має бути замінено символом після /(підкреслення в цьому прикладі).