在Ubuntu的Bash脚本中,如何从一个变量中去除空格
字符串将是
3918912k
想要删除所有的空格。
使用 sed
或 tr
这些工具可以将空白字符替换为无内容符号。
sed 's/ //g'
tr -d ' '
示例:
$ echo " 3918912k " | sed 's/ //g'
3918912k
echo
中使用吗?我遇到了一些问题。它是否应该像这样工作:RESULT="$STR" | set "s/ //g"
? - cbdeveloperRESULT=$(sed "s/ //g" <<< $STR)
- Mattias尝试在Shell中执行以下操作:
var=" 3918912k"
echo ${var//[[:blank:]]/}
[[:blank:]]
是一个POSIX正则表达式类(删除空格、制表符等),请参见http://www.regular-expressions.info/posixbrackets.html。
如果您正在使用bash,最快的方法是:
shopt -s extglob # Allow extended globbing
var=" lakdjsf lkadsjf "
echo "${var//+([[:space:]])/}"
它之所以快是因为使用内置函数而不是启动额外的进程。
但是,如果您想以符合POSIX标准的方式进行操作,请使用sed
:
var=" lakdjsf lkadsjf "
echo "$var" | sed 's/[[:space:]]//g'
shopt -s extglob
。 - glenn jackman一个有趣的方法来从变量中删除所有空格是使用printf:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
事实证明,它比myvar="${myvar// /}"
稍微更有效率,但对于可能出现在字符串中的通配符(*
)不安全。因此,请勿在生产代码中使用此方法。
如果您真的非常想使用这种方法并且真的很担心globbing问题(您确实应该担心),您可以使用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
我发布这个答案只是因为它很有趣,而不是在实践中使用它。
myvar="$( set -f; printf "%s" $myvar )"; echo "[$myvar]"
。 - user2350426echo
来去除字符串开头或结尾以及字符串内部的空格。$ 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
myVar
包含类似*
这样的特殊字符,那么它就不可靠了,因为shell会将其扩展为当前目录中的文件。 - Gilles Quénotecho "$myvar"
可以防止通配符等的扩展。 - bobpaul