74

在ubuntu bash脚本中如何从一个变量中删除空间

字符串将是

   3918912k 

想要删除所有的空格。

4

5 回答 5

134

工具sedtr将通过交换空白为您做到这一点

sed 's/ //g'

tr -d ' '

例子:

$ echo "   3918912k " | sed 's/ //g'
3918912k
于 2012-12-01T17:51:25.960 回答
93

尝试在 shell 中执行此操作:

var="  3918912k"
echo ${var//[[:blank:]]/}

使用参数扩展(这是一个非功能)

[[:blank:]]是一个 POSIX 正则表达式类(删除空格、制表符...),请参阅http://www.regular-expressions.info/posixbrackets.html

于 2012-12-01T12:14:09.283 回答
5

您还可以使用echo删除字符串开头或结尾的空格,还可以删除字符串内的重复空格。

$ myVar="    kokor    iiij     ook      "
$ echo "$myVar"
    kokor    iiij     ook      
$ myVar=`echo $myVar`
$
$ # myVar is not set to "kokor iiij ook"
$ echo "$myVar"
kokor iiij ook
于 2012-12-01T13:45:41.323 回答
5

从变量中删除所有空格的一种有趣方法是使用 printf:

$ myvar='a cool variable    with   lots of   spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit

事实证明,它的效率略高于,但对于可能出现在字符串中的myvar="${myvar// /}"glob ( ) 而言并不安全。*所以不要在生产代码中使用它。

如果你真的很想使用这个方法并且真的很担心 globbing 的事情(你真的应该这样做),你可以使用set -f(它完全禁用了 globbing):

$ ls
file1  file2
$ myvar='  a cool variable with spaces  and  oh! no! there is  a  glob  *  in it'
$ echo "$myvar"
  a cool variable with spaces  and  oh! no! there is  a  glob  *  in it
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglobfile1file2init
$ # See the trouble? Let's fix it with set -f:
$ set -f
$ printf '%s' $myvar ; echo
acoolvariablewithspacesandoh!no!thereisaglob*init
$ # Since we like globbing, we unset the f option:
$ set +f

我发布这个答案只是因为它很有趣,而不是在实践中使用它。

于 2012-12-01T16:34:01.893 回答
5

由于您使用的是 bash,因此最快的方法是:

shopt -s extglob # Allow extended globbing
var=" lakdjsf   lkadsjf "
echo "${var//+([[:space:]])/}"

它是最快的,因为它使用内置函数而不是启动额外的进程。

但是,如果您想以符合 POSIX 的方式执行此操作,请使用sed

var=" lakdjsf   lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
于 2012-12-01T16:42:58.203 回答