如何在bash中删除字符串中间的字符

Vic*_*tor 14 bash

在 bash 中,我有一个字符串,我试图删除字符串中间的一个字符。我知道我们可以像这样从字符串的开头或结尾删除字符:

myVar='YES'
myVar="${myVar#'Y'}"
myVar="${myVar%'S'}"
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能删除中间的那个?

cho*_*oba 24

如果您知道要删除哪些字符,则可以在参数扩展中使用替换:

myVar=${myVar/E}  # Replace E with nothing
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道要保留哪些字符:

myVar=${myVar/[^YS]}  # Replace anything but Y or S
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道该职位:

myVar=${myVar:0:1}${myVar:2:1}  # The first and third characters
Run Code Online (Sandbox Code Playgroud)


Noa*_*nos 5

要仅删除第一个字符而不删除其余字符,请使用单斜杠,如下所示:

myVar='YES WE CAN'

echo "${myVar/E}" 
# YS WE CAN
Run Code Online (Sandbox Code Playgroud)

要删除所有,请使用双斜杠:

echo "${myVar//E}"
# YS W CAN
Run Code Online (Sandbox Code Playgroud)

您不仅可以替换单个字符,还可以替换长正则表达式模式。在此处查看变量扩展/子字符串替换的更多示例。