11

要替换 bash 字符串中的子字符串,str我使用:

str=${str/$pattern/$new}

但是,我目前正在编写一个脚本,该脚本将使用ash.

我有一个包含的字符串'/',我想使用上面的语法来替换'/'我的字符串中的,但它不起作用。

我试过了:

str=${str///a}
str=${str/\//a}
str=${str/'/'/a}

但他们不工作

我该如何解决?

4

1 回答 1

16

此参数扩展是 POSIX sh 的 bash 扩展。如果您查看IEEE 标准1003.1的相关部分,您会发现它不是必需的功能,因此仅承诺 POSIX 合规性的外壳,例如ash他们无论如何都应该这样做,以达到任何特定的正确性标准。

如果您想要 bash 扩展,则需要使用 bash(或其他类似扩展的 ksh 衍生产品)。

在此期间,您可以使用其他工具。例如:

str=$(printf '%s' "$str" | tr '/' 'a')

或者

str=$(printf '%s' "$str" | sed -e 's@/@a@g')
于 2014-02-20T15:58:30.547 回答