Имам скрипт на обвивката с този код:
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
Винаги съм го правил със sed
var=`hg st -R "$path" | sed -e 's/ *$//'`
Ако има по-елегантно решение, надявам се някой да го публикува.
Можете да изтривате нови редове с помощта на tr
:
var=`hg st -R "$path" | tr -d '\n'`
if [ -n $var ]; then
echo $var
done