如何从Bash变量中删除空白字符

2023-11-22 08:06:24 浏览数 (3)

问:

我有一个包含以下代码的shell脚本:

代码语言:javascript复制
var=`hg st -R "$path"`
if [ -n "$var" ]; then
    echo $var
fi

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

  • 有没有一种简单的方法可以从 $var 中删除空格(就像 PHP 中的 trim() )?
  • 有处理这个问题的标准方法吗?

我可以使用 sed 或 AWK,但我希望有更优雅的解决方案。

答:

方法一:使用 echo 命令

代码语言:javascript复制
#! /bin/bash
var="  test  "
var=$(echo -n $var)
echo "|${var}|"

为了更直观地感受 echo 命令的一些处理细节差异,我们可以使用 hexdump 命令以十六进制形式查看其输出,测试截图如下:

其中 echo ${#var} 用于获取字符串变量的长度。0a 是换行符的十六进制值。-n 使 echo 不打印末尾的换行符。

方法二:使用 echo 和 xargs 命令

代码语言:javascript复制
#! /bin/bash
var="  test  "
var=$(echo $var | xargs)
echo "|${var}|"

上述代码中的 xargs 会删除字符串首尾的空白符,还会将字符串中间连续的多个空格压缩为单个空格。

方法三:使用 Bash 内置函数和通配符

代码语言:javascript复制
#! /bin/bash
var="    abc    "
# 删除前导空白字符
var="${var#"${var%%[![:space:]]*}"}"
# 删除尾部空白字符
var="${var%"${var##*[![:space:]]}"}"   
printf '%sn' "===$var==="

这种方法适用于符合 POSIX 规范的 shell 程序。


参考文档:

  • stackoverflow question 369758
  • man echo
  • xargs命令用法实例
  • https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

相关阅读:

  • 在Bash中如何检查字符串是否包含子字符串
  • 如何在Bash中连接字符串变量
  • 为什么要使用xargs命令
  • Bash中$$ $! $# $0 $? $* $@ 等各种符号的含义
  • 在Bash中如何将字符串转换为小写

更多好文请关注↓

1 人点赞