linux - 如何替换 POSIX sh 字符串中的 "/"

标签 linux string shell ash

要替换 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/

相关文章:

c# - dotnet core http请求设置源ip

c# - 从 Linux 服务启动 GTK# 应用程序

c - 指针数组 - 需要更大

C:在C中执行和输出shell命令

python - 如何在 PyCharm 终端中激活 virtualenv?

linux - `SIGWINCH` 如何通过 Bash?

c - 构建执行作为参数传递的程序的简单 shell 脚本

python 当行中的字符串从下一行获取数据时

string - 用 sed 替换方括号之间的字符串

linux - Realtek 8811CU 安装脚本问题