Bash / Shell如何删除变量中的额外空格?

时间:2012-11-07 21:33:41

标签: string bash

如何删除变量中的额外空格?

VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "

Correct result: VAR="Eget ac vel volutpat dic tumst est dui adipiscing" 

有超过16,000,000个待编辑; sed太慢了!

!!! E D I T !!!

字符串OK!谢谢大家

BUT

数组问题中的文字,差距仍然存在: - (

ITM=("  Eget ac  vel volutpat   |  Vel volutpat     dic tumst "
     "    Vestibulum  laoreet     a semper  |orttitor      eu laoreet justo congue ")

IFS=$'|'

for (( i=0 ; i<16000000 ; i++ ))
do
    AAA=( ITM[$i] )
    B=${AAA[0]}     # "  Eget ac  vel volutpat   "
    C=${AAA[1]}     # "  Vel volutpat     dic tumst "

done

3 个答案:

答案 0 :(得分:2)

您不需要为此生成子shell。只需使用bash的内置模式替换。

[ghoti@pc ~]$ shopt -s extglob
[ghoti@pc ~]$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
[ghoti@pc ~]$ VAR=${VAR//+( )/ }
[ghoti@pc ~]$ echo "$VAR"
 Eget ac vel volutpat dic tumst est dui adipiscing 
[ghoti@pc ~]$ VAR=${VAR#+( )}
[ghoti@pc ~]$ echo "$VAR"
Eget ac vel volutpat dic tumst est dui adipiscing
[ghoti@pc ~]$ 

答案 1 :(得分:0)

只需删除引号,例如:

$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "     
$ echo $VAR
Eget ac vel volutpat dic tumst est dui adipiscing
$ echo "$VAR"
    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  
$ 

如果您愿意:

$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
$ VAR="$(echo $VAR)"
$ echo "$VAR"
Eget ac vel volutpat dic tumst est dui adipiscing

此行为称为分词

注意

如评论中所述,只有在您知道变量不包含*等特殊字符时才应使用此功能。

答案 2 :(得分:0)

Shell并没有真正设置为进行大规模数据处理,甚至处理就像折叠空间一样简单。但这是一个不使用sed

的解决方案
VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
VAR=$(echo $VAR)

此代码将VAR设置为原始var的折叠版本。您可以通过执行以下内容来查看:

echo "$VAR"

结果:

Eget ac vel volutpat dic tumst est dui adipiscing