我在变量中有一个字符串,想要删除所有空格。我希望用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我从文件中逐行读取这些字符串,因此我的字符串中没有换行符。因此删除所有空格不会有任何伤害。
答案 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']/}"