要替换bash字符串str中的子字符串,我使用:
str=${str/$pattern/$new}
但是,我现在正在编写一个将用灰烬执行的脚本.
我有一个包含’/’的字符串,我想使用上面的语法来替换我的字符串中的’/’,但它不起作用.
我试过了:
str=${str///a} str=${str/\//a} str=${str/'/'/a}
但它们不起作用
我该如何解决这个问题?
解决方法
此参数扩展是POSIX sh的bash扩展.如果您查看
the relevant section of IEEE standard 1003.1,您将看到它不是必需的功能,因此仅承诺POSIX合规性的shell(例如ash)没有义务实现它,并且没有义务将它们的实现提供给任何特定的标准他们无论如何应该这样做是否正确
如果你想要bash扩展,你需要使用bash(或其他类似扩展的ksh派生词).
在此期间,您可以使用其他工具.例如:
str=$(printf '%s' "$str" | tr '/' 'a')
要么
str=$(printf '%s' "$str" | sed -e 's@/@a@g')