替换/删除 Bash 字符串中的文字方括号

问题描述 投票:0回答:3

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

ldr r3, [r0,#8]! 

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

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

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

bash shell brackets
3个回答
6
投票

使用

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

因为

[]
不是一个有用的模式,所以当
]
是列出的 first 字符时,它会被视为括号表达式的一部分。括号表达式不能嵌套,所以
[
没有限制。

您也可以简单地逃避

]

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

6
投票

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

tr:翻译、压缩和/或删除标准输入中的字符,写入标准输出。

哪里

-d, --delete 删除SET1中的字符,不翻译

以你的例子:

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

输出为:

ldr r3, r0,#8!

0
投票

替换 bash 中的文字字符串(固定字符串)

Shell 参数扩展 - bash 手册

引用字符串的任何部分都会禁止在引用部分的扩展中进行替换

示例

a="1[[[2]]]3"
b="x"
s="aaa;$a;zzz"
echo "a: $s"
echo "b: ${s//"$a"/"$b"}"
a: aaa;1[[[2]]]3;zzz
b: aaa;x;zzz
© www.soinside.com 2019 - 2024. All rights reserved.