# shell - 字符串

## 字符串运算符

下表给出了常用的字符串运算符，一般用于if判断语句中。假设`a="abc"`，`b="def"`

| 符号 | 说明           | 举例                      |
| -- | ------------ | ----------------------- |
| =  | 相等判断符        | `[[ $a = $b ]]` 返回false |
| != | 不等判断符        | `[[ $a = $b ]]` 返回false |
| -n | 检测字符串长度是否不为0 | `[[ -n $a ]]` 返回true    |
| -z | 检测字符串长度是否为0  | `[[ -z $a ]]` 返回false   |

## 字符串to数组

```
#!/bin/bash

str="Mon Tue Wed"
IFS=' ' read -a array <<< $str

size=${#array[@]}
for ((i=0; i<size; i++)); do
    echo ${array[$i]}
done
```

输出结果：

```
Mon
Tue
Wed
```

注意，IFS中的分隔符可以有多个。比如`str="Mon Tue,Wed"`，我们如果想拆分出Mon、Tue、Wed三个单词，只需要把IFS设置为`IFS=' ,'`即可。

## 字符串截取

```
"${var#*str}"    # 删除左边字符串，从左边第一个
"${var##*str}"    # 删除左边字符串，从左边最后一个
"${var%str*}"    # 删除右边字符串，从右边第一个
"${var%%str*}"    # 删除右边字符串，从右边最后一个
```

见下面链接的文章后面的读书笔记

[http://www.runoob.com/linux/linux-shell-variable.html](http://www.runoob.com/linux/linux-shell-variable.html)

## 字符串替换

```
"${var/search/replace}"    # 替换第一个，如果有'/'请使用转义字符'\'
"${var//search/replace}"    # 全部替换
```

## 大小写转换

### 大写to小写

比如 `str="Hi, ALL"`，想转换成 `hi, all`

* bash

```
echo "${str,,}"
```

* awk

```
echo "$str" | awk '{print tolower($0)}'
```

## 字符串包含关系

```
if [[ ${str} =~ "abc" ]]; then
    echo "${str} contains abc"
fi
```
