Replace/remove Bash 字符串中的文字方括号

Replace/remove literal square brackets in Bash string

我正在寻找消除 Bash 字符串中方括号的解决方案。 例如,考虑字符串:

ldr r3, [r0,#8]! 

但是我不确定如何消除“[”和“]”。我想以最优雅的方式消除所有符号,例如:

str="ldr r3, [r0,#8]!"
echo ${str//[,.!]/}

但包含方括号。如何做到这一点?

使用

echo "${str//[][,.!]}"

因为 [] 不是一个有用的模式,当 ] 是列出的 第一个 字符时,它被视为括号表达式的一部分。括号表达式不能嵌套,所以对[.

没有限制

您也可以简单地转义 ]:

echo "${str//[[\],.!]}"

另一个干净的解决方案是 tr:

tr: Translate, squeeze, and/or delete characters from standard input, writing to standard output.

哪里

-d, --delete delete characters in SET1, do not translate

以你为例:

str="ldr r3, [r0,#8]!"
echo $str | tr -d "[]"

输出是:

ldr r3, r0,#8!