前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何从Bash变量中删除空白字符

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

作者头像
程序熵
修改2023-11-22 08:06:24
2480
修改2023-11-22 08:06:24
举报
文章被收录于专栏:技术汇技术汇

问:

我有一个包含以下代码的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 '%s\n' "===$var==="

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


参考文档:

相关阅读:


更多好文请关注↓

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档