字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其他类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号字符串的限制:

双引号的优点:


- work=teacher
- # 单引号
- # 对的写法
- echo 'hello,'$work'!'
- # 错的写法
- echo 'hello,$work!'
-
-
- # 双引号
- # 写法1
- echo "hello,"$work"!"
- # 写法2
- echo "hello,$work!"

某些字符在Bash里有特殊的含义(比如 $,&,*)
当我们输入 echo $work , 他会调用这个work变量,如果没有这个变量就默认给这个变量设置为空字符串。
所以如果我们就是单纯的想要打印 $work,不是在引用变量,那这个时候我们该怎么做?这个时候我们就要去“转义”(escape)。
用法其实跟python中的用法其实是一样的,添加一个反斜杠 \,我们也可以使用单引号,单引号对立面的内容不会做任何的转义
下面我们举个栗子🌰~

反斜杠本身也是特殊字符,如果想要原样输出反斜杠,就需要多它自身转义,连续使用两个反斜杠(\\)

反斜杠除了用于转义,还可以表示一些不可打印的字符。
- string="abcd"
- echo ${#string}
-
- # 输出结果
- 4

echo ${string:3:2}
第一个数字:光标从左往右开始数,偏移几个字符;
第二个数字:取几个字符
TODO:第一个字符的索引值0
- # 从下面的字符串中取出最帅2个字
- string="数学班最帅的老师王大侠"
- echo ${string:3:2}

查找字符I或者o的位置(那个字母先出现就计算哪个):
- string="hello world!"
- echo `expr index "string" lo`
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算数表达式,其值应大于或等于0。
在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)

- array_name=(value0 value1 value2)
-
- # 方法1,默认只能拿到第一个值
- echo $array_name
-
- # 打印结果
- value0
-
- # ----------------------------------
- # 方法2,根据索引取值
- echo ${array_name[0]}
- echo ${array_name[1]}
-
- # 打印结果
- value0
- value1
-
- # ----------------------------------
- # 方法3,获取数组中所有的值,索引位使用 * 或者 @
- echo ${array_name[*]}
- echo ${array_name[@]}
-
- # 打印结果
- value0 value1 value2
- value0 value1 value2


第一个是获取数组的长度,所以是3;
第二个其实就是先获取索引为1的值,然后再计算这个值的长度,所以是6
