使用示例连接bash中的字符串的简单指南

时间:2020-01-09 10:37:20  来源:igfitidea点击:

如何在bash中用下划线,换行符,空格或者任何其他字符连接字符串。
如何在bash或者shell脚本中的字符串中追加子字符串。
如何使用带空白的for循环在变量中添加注视。
Bash用分隔符连接字符串。

这些是我们将在本教程中解决的一些常见问题。
串联意味着将事物按某种链或者系列链接或者放在一起。

我们可以选择通过任何分隔符将两个或者多个字符串放在一起。

没有分隔符的两个字符串的基本串联

这是一个非常简单的用例,其中我们有两个带有某些字符串的变量,并且我们想将它们连接起来

例如,我有两个变量:

我们已经注意到VAR1已经包含一个额外的空间,因此我们只将两个变量一起打印,该脚本的输出将是:

]# ./eg_1.sh
Hello World

现在我们也可以将VAR1和VAR2连接到第三个变量VAR3中,并且输出将相同,即Hello World

连接具有特殊字符的字符串作为分隔符

现在,上面是一个非常基本的示例,让我们将其带入一个新的水平。
在此示例中,我们将字符串与下划线连接起来,我们可以选择任何其他分隔符,例如逗号,空格,连字符等。

以上面的脚本为例,如果我只在两个变量之间放置_(下划线),那会正确吗。

让我们检查一下此脚本的输出:

~]# ./eg_1.sh
World

从我们的输出中," Hello"丢失了,"为什么。
"

因为bash认为$VAR_是一个变量,而$VAR2是第二个变量。
由于$VAR_不存在,所以Hello丢失了。
因此,在这种情况下,使用串联时,请始终使用大括号来表示变量。

因此,如我们所见,我使用了花括号" {}"来确保分隔符不被视为变量的一部分,现在让我们检查脚本的输出:

~]# ./eg_1.sh
Hello_World

这是使用bash字符串串联时应始终记住的最重要的事情之一。
现在,我们可以在此处使用任何其他特殊字符来组合这两个字符串。

串联连接(将字符串添加到变量)

现在假设我们有一个要求,我们必须其中测试多个主机的网络连接,然后打印带有成功和失败主机列表的摘要。

这将要求我们继续存储成功主机和失败主机的列表,可以使用多种方法来完成,但是我们将使用" + ="运算符将字符串列表存储在变量中(或者根据要求转换为数组)

在此示例脚本中,我定义了4个主机的列表,其中2个是可访问的(是的,我已经知道了),而2个是不可访问的,但是我们将使用脚本来进行检查。
根据ping输出,我们将字符串追加到其他变量中

该脚本的输出:

~]# ./eg_1.sh
Reachable: 192.168.43.154 192.168.43.10
Not Reachable: 192.168.43.100 192.168.43.120

其中:如果我们注意到此条件是存储服务器列表的主要部分。
我有意在$server之后添加了一个空白,以便在添加到SUCCESS或者FAILED时服务器列表之间存在间隙

if [[ $? -eq 0 ]];then
       # If success then append the output in SUCCESS variable
       SUCCESS+="$server "
    else
       # If failed then append the server in FAILED variable
       FAILED+="$server "
    fi

我们可以选择在执行结束时去除最后一个空格字符,这会在输出中造成问题:

# Strip last whitespace char
SUCCESS=`echo $SUCCESS | sed 's/$//g'`
FAILED=`echo $FAILED | sed 's/$//g'`

使用换行符连接字符串

我们可以使用相同的运算符+ =添加带有换行符的字符串,尽管打印输出将需要某些额外的处理。
在此示例中,我创建了一个包含一些值的数组,我将遍历这些值,然后在末尾用换行符将它们连接在一起

该脚本的输出:

~]# ./eg_1.sh
OUTPUT: ab
cd
ef
gh
ij

因此,我已经使用换行符将所有字符串组合到一个for循环中(也可以使用while或者任何其他循环都没有关系)。

默认情况下,echo无法理解\ n并将其视为文本,因此我们使用-e来启用反斜杠转义的解释。
-n与echo一起使用以禁止显示最后一行,否则最后将有一个新行,我们也可以使用printf来避免所有这些添加参数。