这个问题已经在这里有一个答案:
- 如何从猛砸可变剪切的空白? 42个回答
在Ubuntu bash脚本如何从一个变量中除去空间
字符串会
3918912k
要删除所有空格。
这个问题已经在这里有一个答案:
在Ubuntu bash脚本如何从一个变量中除去空间
字符串会
3918912k
要删除所有空格。
尝试在shell这样做:
s=" 3918912k"
echo ${s//[[:blank:]]/}
使用参数扩展 (这是一个非POSIX功能)
[[:blank:]]
是一个正则表达式POSIX类(删除空格,制表符...),见http://www.regular-expressions.info/posixbrackets.html
该工具sed
或tr
会为你做这个通过交换白白空白
sed 's/ //g'
tr -d ' '
例:
$ echo " 3918912k " | sed 's/ //g'
3918912k
您还可以使用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
既然你使用bash,最快的方法是:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
这是最快的,因为它使用内置的功能,而不是发射了额外的过程。
但是,如果你想要做一个POSIX兼容的方式,使用sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
从变量删除所有空格一个有趣的方法是用printf:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
事实证明,这是稍微比更有效myvar="${myvar// /}"
,而不是安全方面的水珠( *
),可以出现的字符串中。 所以, 不要在生产代码中使用它。
如果你真的真的想用这个方法,实在担心文件名匹配的东西(你真的应该),你可以使用set -f
(即禁用通配符完全):
$ 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
我张贴了这个答案,只是因为它很有趣,不是在实践中使用它。