删除bash中的空格(无子进程)

时间:2014-05-06 12:15:30

标签: bash whitespace string-matching removing-whitespace

我在变量中有一个字符串,想要删除所有空格。我希望用bash-only来做。目前我只删除空格,但我也想一步删除标签。

string="test    string 1" # first whitespace in string is tab second is space
echo ${string// /} # the whitespace between // is space; output: test   string1
echo ${string// /} # the whitespace between // is tab; output: teststring 1 

宽大的空白是标签。第三个/可以删除。

@anubhava我从文件中逐行读取这些字符串,因此我的字符串中没有换行符。因此删除所有空格不会有任何伤害。

1 个答案:

答案 0 :(得分:4)

使用与任何空白匹配的字符类,而不是尝试替换空间

$ string=$'test\tstring 1'
$ echo "$string"
test    string 1
$ echo "${string//[[:space:]]/}"
teststring1

[:space:]表示[ \t\r\n\v\f],即它会匹配空格,制表符,回车符,换行符和换页符。

@glennjackman所示,您可以使用字符类[:blank:]删除水平空格:

echo "${string//[[:blank:]]/}"

如果您只想删除空格和标签,请说:

echo "${string//[ $'\t']/}"