有效地替换纯Bash中的所有子串外观

时间:2015-01-07 08:27:18

标签: bash

我想使用纯Bash(没有awk,perl或sed)从字符串中替换所有子串。

这一行:

string=${string/$oldValue/$newValue}

仅替换第一个$oldValue外观。

这就是我用以下方式做到的原因:

while [[ $string == *"$oldValue"* ]]; do
    string=${string/$oldValue/$newValue}
done

但我不喜欢这个"丑陋" (=效率低下)方法。

有更好的方法吗? (可能是第一行代码的通用形式)

2 个答案:

答案 0 :(得分:4)

尝试类似:

export str="Hello World Hello"
export oldValue="Hello"
export newValue="Hi"
echo ${str//$oldValue/$newValue}
Hi World Hi

答案 1 :(得分:3)

添加额外的/$oldValue替换所有$newValue

string="${string//$oldValue/$newValue}"