bash 字符串替换中的变量

Bin*_*Bin 0 unix linux bash shell

我正在尝试在 bash 中进行字符串替换,想更好地理解它。

我设计了一个这样的成功案例:

a=abc_de_f
var=$a
echo ${var//_/-}
Run Code Online (Sandbox Code Playgroud)

输出是abc-de-f. 这有效。

但是,以下脚本失败:

a=abc_de_f
echo ${$a//_/-}
Run Code Online (Sandbox Code Playgroud)

错误消息是${$a//_/-}: bad substitution。这似乎与我们如何使用变量进行替换有关。为什么这会失败?在这种情况下 bash 如何处理变量?

另外,在 bash 字符串替换中处理转义字符的最佳实践是什么?

log*_*kai 6

在第二种情况下,您不需要第二个$字符串a

a=abc_de_f
echo ${a//_/-}
Run Code Online (Sandbox Code Playgroud)

如果您想添加间接级别,您可以!在变量之前使用,如下所示

a=abc_de_f
b=a
echo ${b//_/-}
Run Code Online (Sandbox Code Playgroud)

将输出a, 同时

echo ${!b//_/-}
Run Code Online (Sandbox Code Playgroud)

将输出abc-de-f.

请参阅此处有关 BASH 中转义艺术的讨论