Как да отрежа белите символи от променлива на Bash?

Имам скрипт на обвивката с този код:

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

Но условният код винаги се изпълнява, защото hg st винаги отпечатва поне един символ за нов ред.

  • Има ли прост начин за премахване на белите символи от $var (като trim() в PHP)?

или

  • Има ли стандартен начин за справяне с този проблем?

Мога да използвам sed или AWK, но ми се иска да мисля, че има по-елегантно решение на този проблем.

Bash разполага с функция, наречена разширяване на параметри, която, наред с други неща, позволява замяна на низове въз основа на така наречените шаблони (шаблоните приличат на регулярните изрази, но има съществени разлики и ограничения). [flussence's original line: 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)