Що означає подвійний косий косий знак у {$ {f // / _} `?


18

Я вивчаю Bash, і хочу замінити символи пробілу іншими "не порожніми" символами. Я використовую forцикл:

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

Моє запитання: чому подвійний косий проміжок і пробіл ${f// /_}? Що робить ${f// /_}?


4
Якщо вам не потрібно це вивчити напам’ять, вам слід принаймні знати, де читати про це: це в посібнику з баш .
glenn jackman

Відповіді:


20

Це схема заміни з використанням bashрозширення параметра.

В ${f// /_}:

  • Подвійні косої риски //призначені для заміни всіх залягань простору _, якщо ви покладете одну косу рису /, замінюється лише перший пробіл

  • Простір є, тому що ви замінюєте пробіл (з підкресленням)

Таким чином, шаблон є:

${parameter//find/replace}

Поставте прапорець, man bashщоб отримати більше уявлення

Щоб потрапити в Parameter Expansionрозділ man bashодразу:

LESS=+/'Parameter Expansion' man bash

3
Словом, його глобальний пошук і заміна.
glenn jackman

4

Розділ "{f// /_}означає, що замініть кожен пробіл на і підкреслити. Для цього використовується розширення параметра Bash, змінна, fвизначена у for f in *\ *;заповіті, буде проходити для кожного матчу розширення оболонки (глобулювання). Кожен раз, коли знайдене ім'я файлу стане значенням $f.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.