从Bash变量中删除空格

8
假设一个变量包含空格、换行符和制表符,后跟一些文本,那么为什么这个操作会发生:

${var#"${var%%[![:space:]]*}"}  # strip var of everything 
                                # but whitespace
                                # then remove what's left 
                                # (i.e. the whitespace) from var

去除空格,只留下文本,但是这样:

${var##[:space:]*}  # strip all whitespace from var

不行吗?

4个回答

27

如果我设置var=" This is a test ",那么两个建议都不起作用,只会删除前导空格。 为什么不使用替换功能来删除所有出现的空格,而不仅仅是第一个:

 ${var//[[:space:]]}

4

[:space:]是一个字符类。只有当它嵌套在另一个[ ]集合中时才有效。


谢谢 - 我不知道字符类需要嵌套括号。 - MCS
@MCS - 这在 regex(7) 中有记录(输入 "man 7 regex" 查看)。现代大多数 regex 实现都包括对 POSIX 命名字符类的支持,因此您也可以在 Perl 的 perlre 手册页面中了解它们。 - converter42

1

0

$(echo $var)是什么意思?

> a="   123 456  " ; a2="$(echo $a)" ; echo "a=\"${a}\" a2=\"${a2}\""
a="   123 456  " a2="123 456"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接