📅  最后修改于: 2023-12-03 15:13:37.370000             🧑  作者: Mango
在Shell脚本中,经常需要把变量的前面空格去掉,以方便后续操作。本文将分享几种方法,以及它们的优缺点。
使用sed
命令可以通过正则表达式匹配,然后去除前面的所有空格。下面是示例代码:
var=" hello world"
echo "V1: $var"
var=$(echo $var | sed 's/^[ \t]*//')
echo "V2: $var"
代码解析:
var
,前面有若干个空格。var
的值。sed
命令和正则表达式,将变量前面的所有空格去除,并重新赋值到变量var
中。var
的新值。输出如下所示:
V1: hello world
V2: hello world
此方法的优点是简单易懂,在简单的场景下可行。缺点是需要用到sed
命令,比较耗费资源。并且这种方法只能去除前面的空格,如果需要去除后面的空格,就需要使用新的命令或新增复杂的正则表达式。
这种方法比较简单,只需要用到bash的内部变量${var#pattern}
语法即可。它会在变量var
后面去除匹配pattern
的子字符串。实现代码如下:
var=" hello world"
echo "V1: $var"
var="${var#"${var%%[![:space:]]*}"}"
echo "V2: $var"
代码解析:
var
,前面有若干个空格。var
的值。${var#pattern}
语法,去除变量后面匹配的子字符串。var
的新值。输出如下所示:
V1: hello world
V2: hello world
此方法的优点是简单易懂,不用使用sed
命令。缺点是在某些特殊场景下可能会有其他问题。
这种方法解决了前两种方法的限制。它不仅可以去除前面和后面的空格,而且可以多行处理。实现代码如下:
var=" hello world "
echo "V1: $var"
var=$(echo "${var}" | tr -d '[[:space:]]')
echo "V2: $var"
代码解析:
var
,前面和后面有若干个空格。var
的值。echo
命令和tr
命令组合,去除变量的所有空格,并重新赋值到变量var
中。var
的新值。输出如下所示:
V1: hello world
V2: helloworld
此方法的优点是可以去除变量的前后空格,并且适用于多行文本。缺点是需要用到管道操作和tr
命令,比较耗费资源。
这种方法和方法三类似,都是适用于多行文本,并且可以去除多余的空格。具体实现代码如下:
var=" hello world "
echo "V1: $var"
var=$(echo "${var}" | awk '{$1=$1};1')
echo "V2: $var"
代码解析:
var
,前面和后面有若干个空格。var
的值。awk
命令对变量进行处理,去除变量的所有空格,并重新赋值到变量var
中。var
的新值。输出如下所示:
V1: hello world
V2: hello world
此方法的优点是可以去除变量的前后空格,并且适用于多行文本。缺点是需要用到awk命令,比较耗费资源。
从以上四种方法中可以看出,不同场景下适用不同的空格去除方法。在处理多行文本时,使用echo/awk方法效果最佳。在简单场景下,使用${var#pattern}语法最为简单,不用使用额外的命令。在某些特殊场景下,使用sed命令可能是唯一的选择。