使用示例连接bash中的字符串的简单指南
如何在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来避免所有这些添加参数。