我有一个shell脚本与这段代码:

var=`hg st -R "$path"`
if [ -n "$var" ]; then
    echo $var
fi

但是条件代码总是执行,因为hg st总是打印至少一个换行符。

是否有一个简单的方法从$var中剥离空白(如PHP中的trim())?

or

有没有处理这个问题的标准方法?

我可以使用sed或AWK,但我认为有一个更优雅的解决方案来解决这个问题。


当前回答

这将删除字符串中的所有空格,

 VAR2="${VAR2//[[:space:]]/}"

/替换字符串中第一次出现的空格和//所有出现的空格。也就是说,所有的空格都被- nothing取代

其他回答

这修整了前端和末端的多个空间

whatever=${whatever%% *}

无论= ${无论# *}

Use:

var=`expr "$var" : "^\ *\(.*[^ ]\)\ *$"`

它去掉了开头和结尾的空格,我认为这是最基本的解决方案。不是Bash内置的,但'expr'是coreutils的一部分,所以至少不需要像sed或AWK这样的独立实用程序。

Read已经修整了空白,所以在bash中你可以这样做:

$ read foo <<< "   foo  bar   two spaces follow   "
$ echo ".$foo."
.foo  bar   two spaces follow.

POSIX兼容的版本稍长一些

$ read foo << END
   foo  bar   two spaces follow   
END
$ echo ".$foo."
.foo  bar   two spaces follow.

使用Bash的扩展模式匹配功能(shopt -s extglob),你可以这样使用:

修剪{# # * ()}

删除任意数量的前导空格。

这将删除字符串中的所有空格,

 VAR2="${VAR2//[[:space:]]/}"

/替换字符串中第一次出现的空格和//所有出现的空格。也就是说,所有的空格都被- nothing取代