字符串替换中的bash变量

时间:2016-09-29 04:40:12

标签: linux bash shell unix

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

我制作了这样一个成功案例:

a=abc_de_f
var=$a
echo ${var//_/-}

outout是abc-de-f。这有效。

但是,以下脚本失败:

a=abc_de_f
echo ${$a//_/-}

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

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

1 个答案:

答案 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