如何修剪Bash变量中的空白部分?

我有一个带有这种代码的shell脚本。

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

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

  • 有什么简单的方法可以从$var中去除空白(就像PHP中的trim()一样)?

或者

  • 是否有一个标准的方法来处理这个问题?

我可以使用sedAWK,但我想有一个更优雅的办法来解决这个问题。

Bash有一个叫做参数扩展的功能,除其他外,它允许根据所谓的**模式进行字符串替换(模式类似于正则表达式,但有根本的区别和限制)。 [flussence'的原话。Bash有正则表达式,但它们被很好地隐藏起来了:]

下面演示了如何从一个变量值中去除***所有的空白(甚至是内部的空白)。

$ var='abc def'
$ echo "$var"
abc def
# Note: flussence's original expression was "${var/ /}", which only replaced the *first* space char., wherever it appeared.
$ echo -n "${var//[[:space:]]/}"
abcdef
评论(11)

我总是用sed来做。

  var=`hg st -R "$path" | sed -e 's/  *$//'`

如果有一个更优雅的解决方案,我希望有人能把它贴出来。

评论(4)

你可以用tr删除换行。

var=`hg st -R "$path" | tr -d '\n'`
if [ -n $var ]; then
    echo $var
done
评论(1)