在ubuntu bash脚本中如何从一个变量中删除空间
字符串将是
3918912k
想要删除所有空白区域。
答案 0 :(得分:82)
工具sed
或tr
将通过无空间交换空白来为您执行此操作
sed 's/ //g'
tr -d ' '
示例:
$ echo " 3918912k " | sed 's/ //g'
3918912k
答案 1 :(得分:61)
尝试在shell中执行此操作:
s=" 3918912k"
echo ${s//[[:blank:]]/}
使用parameter expansion(这是非posix功能)
[[:blank:]]
是POSIX正则表达式类(删除空格,制表符......),请参阅http://www.regular-expressions.info/posixbrackets.html
答案 2 :(得分: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
答案 3 :(得分: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'
答案 4 :(得分:2)
从变量中删除所有空格的一种有趣方法是使用printf:
$ myvar='a cool variable with lots of spaces in it'
$ printf -v myvar '%s' $myvar
$ echo "$myvar"
acoolvariablewithlotsofspacesinit
事实证明它比myvar="${myvar// /}"
略高,但对于字符串中可能出现的globs(*
)不安全。所以不要在生产代码中使用它。
如果你真的真的想要使用这种方法并且真的很担心这种情况(并且你真的应该这样做),你可以使用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
我发布这个答案只是因为它很有趣,而不是在实践中使用它。