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

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

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

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

我的问题是,为什么里面有双斜线和空格${f// /_}?这是什么${f// /_}意思?

答案1

bash这是一个使用参数扩展的替换模式。

${f// /_}

  • 双斜线//用于替换所有出现的空格_,如果你放一个斜线/,则只有第一个空格会被替换

  • 之所以有空格,是因为您正在替换空格(用下划线)

因此模式基本上是:

${parameter//find/replace}

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

立即到达以下Parameter Expansion部分man bash

LESS=+/'Parameter Expansion' man bash

答案2

部分表示用 和 替换每个空格。这是使用 Bash 参数扩展,在 中定义的"{f// /_}变量将在每次匹配 shell 扩展(通配符)时运行。每次找到的文件名都将成为值。ffor f in *\ *;$f

参数扩展的含义是,//每个出现的后面的字符(本例中为空格)都应该被后面的字符(本例中为下划线) //替换。/

相关内容