字符串
字符串引用
Shell中引用字符串可以使用双引号,也可以使用单引号,也可以不使用引号。
双引号
最常使用的引用形式就是加双引号
str="test"
echo "quote \"$str\""
使用双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
单引号
str='this is a string'
使用单引号有所限制:
- 在echo命令下,单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
无引号
str=this is a string
str=this
不使用引号只适合引用单个单词变量时使用,空格之后的字符无法识别。
字符串操作
拼接字符串
your_name="Jerry"
# 使用双引号拼接
greeting1="hello, "$your_name" !\r"
greeting2="hello, ${your_name} !"
echo -e $greeting1$greeting2
# 使用单引号拼接
greeting3='hello, '$your_name' !\r'
greeting4='hello, ${your_name} !'
echo -e $greeting3$greeting4
输出结果:
hello, Jerry !
hello, Jerry !
hello, Jerry !
hello, ${your_name} !
证明单引号中直接引用变量是无效的。
获取字符串长度
string="abcdefg"
echo ${#string}
#输出为7
提取子字符串
string="I am learning Shell!"
echo ${string:1:5} # 输出 am l
echo ${string:3} # 输出 m learning Shell!
空格不做字符统计,使用${string:1:5}时包头不包尾。
反引号使用
如果需要调用命令的输出,或把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行,反引号的作用和$(命令)是一样的,但是反引号非常容易和单引号搞混,所以推荐大家使用 $(命令) 的方式引用命令的输出。
echo `date`
#输出为:Tue Jun 25 01:43:27 UTC 2019
#作用与命令 echo $(date) 相同
查找子字符串
string="I am learning Shell!"
echo `expr index "$string" Sh`
echo $(expr index "$string" Sh)
#输出为 15
查找字符 S 的位置(哪个字母先出现就计算哪个)
数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
定义数组
用括号来表示数组,数组元素用空格分割开,等号左边不能加空格
array_name=(value0 value1 value2 value3 ...)
也可以使用空行:
array_name=(
value0
value1
value2
value3
...
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
...
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制。
读取数组
${array_name[index]}
通过引用数组的方式进行读取
使用 @ 获取 * 符号可以获取数组中的所有元素:
array=(1 2 3 4)
echo ${array[2]}
echo ${array[@]}
echo ${array[*]}
#输出为
3
1 2 3 4
获取数组长度
获取数组长度的方法与获取字符串长度的方法相同:
array=(12 2 3 4)
# 取得数组指定元素的长度
echo ${#array[2]}
# 取得数组元素的个数
echo ${#array[@]}
# 取得数组元素的个数
echo ${#array[*]}
# 取得数组单个元素的长度(取最大)
echo ${#array[n]}
# 输出为
1
4
4
2