我正在学习 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 扩展(通配符)时运行。每次找到的文件名都将成为值。f
for f in *\ *;
$f
参数扩展的含义是,//
每个出现的后面的字符(本例中为空格)都应该被后面的字符(本例中为下划线) //
替换。/