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 字符串替换中处理转义字符的最佳实践是什么?
在第二种情况下,您不需要第二个$字符串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 中转义艺术的讨论