如何删除Bash变量的空白字符

Questions分类: bash如何删除Bash变量的空白字符
朱 茂海 管理员 asked 1年 ago

我的一个shell脚本代码如下:
var=`hg st -R “$path”`
if [ -n “$var” ]; then
echo $var
fi
但if里的执行始终都执行,因为hg st至少会打印一个新行字符。
有没有简单的方法来删除$var的空白字符,像PHP的trim()
或者
有没有标准的方法来处理这个问题?
我能使用sed或者awk,但我认为还有更优雅的方法来解决这个问题。

1 Answers
朱 茂海 管理员 answered 1年 ago

我们来定义一个包含前导,尾部和中间空白字符的变量:
FOO=’ test test test ‘
echo -e “FOO=’${FOO}'”
# > FOO=’ test test test ‘
echo -e “length(FOO)==$(echo -ne “${FOO}” | wc -m)”
# > length(FOO)==16
echo命令使用-n选项来避免添加一个回车符。
如何删除所有空白字符:
FOO=’ test test test ‘
FOO_NO_WHITESPACE=”$(echo -e “${FOO}” | tr -d ‘[:space:]’)”
echo -e “FOO_NO_WHITESPACE=’${FOO_NO_WHITESPACE}'”
# > FOO_NO_WHITESPACE=’testtesttest’
echo -e “length(FOO_NO_WHITESPACE)==$(echo -ne “${FOO_NO_WHITESPACE}” | wc -m)”
# > length(FOO_NO_WHITESPACE)==12
如何删除前置空白字符:
FOO=’ test test test ‘
FOO_NO_LEAD_SPACE=”$(echo -e “${FOO}” | sed -e ‘s/^[[:space:]]*//’)”
echo -e “FOO_NO_LEAD_SPACE=’${FOO_NO_LEAD_SPACE}'”
# > FOO_NO_LEAD_SPACE=’test test test ‘
echo -e “length(FOO_NO_LEAD_SPACE)==$(echo -ne “${FOO_NO_LEAD_SPACE}” | wc -m)”
# > length(FOO_NO_LEAD_SPACE)==15
删除尾部空白字符:
FOO=’ test test test ‘
FOO_NO_TRAIL_SPACE=”$(echo -e “${FOO}” | sed -e ‘s/[[:space:]]*$//’)”
echo -e “FOO_NO_TRAIL_SPACE=’${FOO_NO_TRAIL_SPACE}'”
# > FOO_NO_TRAIL_SPACE=’ test test test’
echo -e “length(FOO_NO_TRAIL_SPACE)==$(echo -ne “${FOO_NO_TRAIL_SPACE}” | wc -m)”
# > length(FOO_NO_TRAIL_SPACE)==15