Вопрос Что означает двойная косая черта в `$ {f // / _}`?


Я изучаю Bash, и я хочу заменить символы пробела другими «непустыми» символами. Я использую for цикл:

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

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


13
2018-03-15 14:44


происхождения


Если вам не нужно изучать его наизусть, вы должны хотя бы знать, где его читать: это руководство по bash, - glenn jackman


ответы:


Это замена шаблона с использованием bash расширение параметра.

В ${f// /_}:

  • Двойные косые черты // для замены всех вхождений пространства на _, если вы поместите одну косую черту /, будет заменено только первое место

  • Пространство есть, потому что вы заменяете пространство (с подчеркиванием)

Таким образом, шаблон в основном таков:

${parameter//find/replace}

Проверьте man bash чтобы получить больше идей.

Чтобы добраться до Parameter Expansion раздел man bash однажды:

LESS=+/'Parameter Expansion' man bash

14
2018-03-15 14:48



Короче говоря, его Глобальный поиск и замена. - glenn jackman
@glennjackman за очень, очень маленькие значения «глобальных». - hobbs


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

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


3
2018-03-15 14:51