我正在尝试在bash中进行字符串替换,希望更好地理解它。
我制作了这样一个成功案例:
a=abc_de_f
var=$a
echo ${var//_/-}
outout是abc-de-f
。这有效。
但是,以下脚本失败:
a=abc_de_f
echo ${$a//_/-}
错误消息为${$a//_/-}: bad substitution
。
这似乎与我们如何在替代中使用变量有关。为什么这会失败?在这种情况下,bash如何处理变量?
另外,在bash字符串替换中处理转义字符的最佳做法是什么?
答案 0 :(得分:4)
在第二种情况下,您不需要第二个$
,因为a
是字符串。
a=abc_de_f
echo ${a//_/-}
如果您想添加indirection级别,可以在变量之前使用!
,如
a=abc_de_f
b=a
echo ${b//_/-}
将输出a
,而
echo ${!b//_/-}
将输出abc-de-f
。
有关BASH逃逸艺术的讨论,请参阅here