📜  bash 去除前面的空格 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:13:37.370000             🧑  作者: Mango

Bash 去除前面的空格 - Shell-Bash

在Shell脚本中,经常需要把变量的前面空格去掉,以方便后续操作。本文将分享几种方法,以及它们的优缺点。

方法一:使用$sed

使用sed命令可以通过正则表达式匹配,然后去除前面的所有空格。下面是示例代码:

var="   hello world"
echo "V1: $var"
var=$(echo $var | sed 's/^[ \t]*//')
echo "V2: $var"

代码解析:

  1. 定义一个字符串变量var,前面有若干个空格。
  2. 执行echo命令,展示变量var的值。
  3. 通过sed命令和正则表达式,将变量前面的所有空格去除,并重新赋值到变量var中。
  4. 再次执行echo命令,展示去除空格后变量var的新值。

输出如下所示:

V1:    hello world
V2: hello world

此方法的优点是简单易懂,在简单的场景下可行。缺点是需要用到sed命令,比较耗费资源。并且这种方法只能去除前面的空格,如果需要去除后面的空格,就需要使用新的命令或新增复杂的正则表达式。

方法二:使用${var#pattern}语法

这种方法比较简单,只需要用到bash的内部变量${var#pattern}语法即可。它会在变量var后面去除匹配pattern的子字符串。实现代码如下:

var="   hello world"
echo "V1: $var"
var="${var#"${var%%[![:space:]]*}"}"
echo "V2: $var"

代码解析:

  1. 定义一个字符串变量var,前面有若干个空格。
  2. 执行echo命令,展示变量var的值。
  3. 使用内部变量${var#pattern}语法,去除变量后面匹配的子字符串。
  4. 再次执行echo命令,展示去除空格后变量var的新值。

输出如下所示:

V1:    hello world
V2: hello world

此方法的优点是简单易懂,不用使用sed命令。缺点是在某些特殊场景下可能会有其他问题。

方法三:使用echo语法

这种方法解决了前两种方法的限制。它不仅可以去除前面和后面的空格,而且可以多行处理。实现代码如下:

var="      hello world     "
echo "V1: $var"
var=$(echo "${var}" | tr -d '[[:space:]]')
echo "V2: $var"

代码解析:

  1. 定义一个字符串变量var,前面和后面有若干个空格。
  2. 执行echo命令,展示变量var的值。
  3. 使用echo命令和tr命令组合,去除变量的所有空格,并重新赋值到变量var中。
  4. 再次执行echo命令,展示去除空格后变量var的新值。

输出如下所示:

V1:       hello world     
V2: helloworld

此方法的优点是可以去除变量的前后空格,并且适用于多行文本。缺点是需要用到管道操作和tr命令,比较耗费资源。

方法四:使用awk语法

这种方法和方法三类似,都是适用于多行文本,并且可以去除多余的空格。具体实现代码如下:

var="      hello world     "
echo "V1: $var"
var=$(echo "${var}" | awk '{$1=$1};1')
echo "V2: $var"

代码解析:

  1. 定义一个字符串变量var,前面和后面有若干个空格。
  2. 执行echo命令,展示变量var的值。
  3. 使用awk命令对变量进行处理,去除变量的所有空格,并重新赋值到变量var中。
  4. 再次执行echo命令,展示去除空格后变量var的新值。

输出如下所示:

V1:       hello world     
V2: hello world

此方法的优点是可以去除变量的前后空格,并且适用于多行文本。缺点是需要用到awk命令,比较耗费资源。

结论

从以上四种方法中可以看出,不同场景下适用不同的空格去除方法。在处理多行文本时,使用echo/awk方法效果最佳。在简单场景下,使用${var#pattern}语法最为简单,不用使用额外的命令。在某些特殊场景下,使用sed命令可能是唯一的选择。