字符串简介
我相信对字符串的操作,是所有开发人员在开发过程中面对的最多的操作之一,在任何一个常规的系统、编程语言或者脚本上对于字符串的操作都是必不可少,字符串也是Shell中最常用的数据类型之一。
字符串(String)定义:简单的说,就是一系列字符的组合
Shell中的字符串
Shell中的字符串分为三种形式,分别是" "
双引号形式,' '
单引号形式,以及没有任何引号修饰的形式,这三种不同形式的字符串在shell脚本解析的时候是会有区别的,接下来会进行详细的说明
举例说明:
str1="这是一个双引号括起来的字符串"
str2='这是一个单引号括起来的字符串'
str3=这是一个啥也没有的字符串
废话不多说直接上代码
#!/bin/bash
# !注意shell中一般变量都是大写字符,为了显示方便 我使用了小写字符
# 打印字符串
A=100
# 双引号
str1="这是一个双引号括起来的字符串,看看能取到A的值吗? A = $A,看看能输出双引号吗?\" "
# 单引号(此处会报错 无法进行转义)
str2='这是一个单引号括起来的字符串,看看能取到A的值吗? A = $A,看看能输出单引号吗\' '
# 没有引号(内部出现空格的话会无法解析)
str3=这是一个没有引号字符串,看看能取到A的值吗?A=$A
# 最终结果
echo "str1 = $str1"
echo "str2 = $str2"
echo "str3 = $str3"
最终结果:
[root@hadoop100 shell]# ./stringShell.sh
str1 = 这是一个双引号括起来的字符串,看看能取到A的值吗? A = 100,看看能输出双引号吗?"
str2 = 这是一个单引号括起来的字符串,看看能取到A的值吗? A = $A,看看能输出单引号吗?
str3 = 这是一个没有引号字符串,看看能取到A的值吗A=100
从打印出来的结果,可以得出的结论是:
1)双引号包裹的字符串的特点是:
- 部分字符串原样输出,其中的变量会被解析,然后在输出变量对应的值
- 双引号的包括内部的字符串可以出现转义字符
2)单引号包裹的字符串的特点是:
- 字符串内部的变量会被解析,但是其内部无法进行转义字符的输入
3) 没有引号的字符串
- 字符串内部变量会被解析,但是其内部不能出现空格,出现空格会造成无法解析的错误,
因为shell会自动以空格前的字符串是一个完整的字符串,不会去解析后面剩余的字符串
获取字符串长度
# 语法
${#string_name}
在此处计算上面str1的长度
echo "str1Length = ${#str1}"
输出结果为:
str1Length = 45
字符串的拼接
shell脚本中字符串拼接非常简单,不需要任何的连接符,直接写在一起就行了
示例代码,此处使用命令行传参或者说位置参数
#!/bin/bash
echo "拼接字符串: $1 $2"
在命令行输入运行:
./shellString.sh 字符串1 字符串2
最终结果:
需要注意的是,由于没有引号包裹的字符串存在空格后不解析的问题,如果不加引号调用字符串,需要使用如下调用:
# 中间不能有空格
echo 拼接字符串: $1$2