要替换 bash 字符串 str
中的子字符串,我使用:
str=${str/$pattern/$new}
不过,我目前正在编写一个将使用 ash
执行的脚本。
我有一个包含 '/'
的字符串,我想使用上面的语法来替换我的字符串中的 '/'
但它不起作用。
我试过:
str=${str///a}
str=${str/\//a}
str=${str/'/'/a}
但是它们不起作用
我该如何解决?
最佳答案
这个参数扩展是 POSIX sh 的 bash 扩展。如果您查看 the relevant section of IEEE standard 1003.1 ,您会发现它不是必需的功能,因此 promise 仅符合 POSIX 标准的 shell,例如 ash
,没有义务实现它,也没有义务让它们的实现遵循任何他们无论如何都应该这样做的特定正确性标准..
如果你想要 bash 扩展,你需要使用 bash(或其他类似扩展的 ksh 衍生物)。
在此期间,您可以使用其他工具。例如:
str=$(printf '%s' "$str" | tr '/' 'a')
或
str=$(printf '%s' "$str" | sed -e 's@/@a@g')
关于linux - 如何替换 POSIX sh 字符串中的 "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912837/