$ {f // / _}中的双斜杠是什么意思?


17

我正在学习Bash,我想用其他“非空白”字符替换空格字符。我正在使用for循环:

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

我的问题是,为什么要使用双斜线和空格${f// /_}?怎么${f// /_}办?


3
如果您不需要内心地学习它,那么至少应该知道在哪里可以读到它:它在bash手册中
格伦·杰克曼(Glenn Jackman)'16

Answers:


19

那就是使用bash参数扩展的替换模式。

${f// /_}

  • 双斜杠//用于将所有出现的空格替换为_,如果您放一个斜杠/,则仅第一个空格将被替换

  • 有空格,因为您要替换空格(带下划线)

因此,模式基本上是:

${parameter//find/replace}

检查man bash以获得更多想法。

要立即进入的Parameter Expansion部分man bash

LESS=+/'Parameter Expansion' man bash

2
简而言之,它是全球性的搜索和替代。
格伦·杰克曼(Glenn Jackman)'16

3

该部分"{f// /_}意味着用和下划线替换每个空格。这是使用Bash参数扩展,对于shell扩展(globbing)的每次匹配,都会运行中f定义的变量for f in *\ *;。每次找到的文件名将成为值$f

参数扩展的//含义是每次出现后跟的字符//(在此示例中为空格),应替换为在后的字符/(在本示例中为下划线)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.