1.9 Shell 变量的删除、替换和替代
Linux 提供一些可以直接对变量进行操作的符号。通过这些符号,变量中的部分内容可以被删除、替换和替代。在 Shell 中,变量的删除、替换和替代也是非常重要的。通过简单操作修改变量,可以减少代码的行数并提高可读性。
1.9.1 Shell 变量的删除
变量删除的操作方法如下:
| 格式 | 说明 | 
|---|---|
| ${变量名#*关键字符} | 如果变量内容从头开始的数据符合 关键字符,则将符合的最短数据删除 | 
| ${变量名##*关键字符} | 如果变量内容从头开始的数据符合 关键字符,则将符合的最长数据删除 | 
| ${变量名%关键字符*} | 如果变量内容从尾开始的数据符合 关键字符,则将符合的最短数据删除 | 
| ${变量名%%关键字符*} | 如果变量内容从尾开始的数据符合 关键字符,则将符合的最长数据删除 | 
示例代码如下:
#!/bin/bash# 定义一个示例字符串
str="hello_world_hello_world"# 删除变量内容中从头开始的最短匹配的 'o',结果为 'hell_world_hello_world'
echo "${str#*o}"# 删除变量内容中从头开始的最长匹配的 'o',结果为 '_world_hello_world'
echo "${str##*o}"# 删除变量内容中从尾开始的最短匹配的 'o',结果为 'hello_world_hello_w'
echo "${str%o*}"# 删除变量内容中从尾开始的最长匹配的 'o',结果为 'hello_world_hello_w'
echo "${str%%o*}"1.9.2 Shell 变量的替换
在日常工作中,常常需要判断某个变量是否存在。若变量存在则使用既有的配置,若变量不存在,则给予一个常用的配置。
变量替换的操作方式如下:
| 格式 | 说明 | 
|---|---|
| ${变量名/旧字符串/新字符串} | 若变量内容符合 旧字符串,则第一个旧字符串会被新字符串替换 | 
| ${变量名//旧字符串/新字符串} | 若变量内容符合 旧字符串,则全部旧字符串会被新字符串替换 | 
示例代码如下:
#!/bin/bash# 定义一个示例字符串
str="hello_world_hello_world"# 替换所有的 'o' 为 'x',结果为 'hellx_wxrld_hellx_wxrld'
echo "${str//o/x}"# 替换第一个 'o' 为 'x',结果为 'hellx_world_hello_world'
echo "${str/o/x}"
1.9.3 Shell 变量的自增
Shell 变量的自增运算符是 i++ 和 ++i。
- i++表示先赋值再自加
- ++i表示先自加再赋值
#!/bin/bash# 定义一个示例变量
i=0# i++ 表示先赋值再自加,所以此时 i 的值为 0,输出 0
echo "i++ returns $((i++))"
# 输出结果为 0# 输出此时 i 的值为 1
echo "After i++, i is $i"
# 输出结果为 1# 重置示例变量
i=0# ++i 表示先自加再赋值,所以此时 i 的值为 1,输出 1
echo "++i returns $((++i))"
# 输出结果为 1# 输出此时 i 的值为 1
echo "After ++i, i is $i"
# 输出结果为 11.10 Shell 变量中的特殊符号
在Shell脚本中,有许多特殊符号用于不同的操作和功能。以下是一些常见的Shell变量中的特殊符号及其用途:
基本符号
- $:用于引用变量。例如,- $VAR表示变量- VAR的值。
- ${}:用于引用变量,尤其是在变量名后面紧跟非变量名字符时。例如,- ${VAR}123表示变量- VAR的值加上字符串- 123。
特殊变量
- $0:当前脚本的名称。
- $1到- $9:传递给脚本或函数的参数。- $1是第一个参数,- $2是第二个参数,依此类推。
- $#:传递给脚本或函数的参数个数。
- $*:传递给脚本或函数的所有参数,作为一个字符串。
- "$@":传递给脚本或函数的所有参数,每个参数保持独立。
- $?:最近一次命令的退出状态,0表示成功,非0表示失败。
- $$:当前Shell进程的进程ID(PID)。
- $_:最后一个命令的最后一个参数或最后一个命令的结果。
控制字符
- ;:命令分隔符,用于在一行中执行多个命令。
- &&:逻辑AND,用于连接两个命令,第一个命令成功时才执行第二个命令。
- ||:逻辑OR,用于连接两个命令,第一个命令失败时才执行第二个命令。
- &:将命令放入后台执行。
- |:管道符,用于将一个命令的输出作为下一个命令的输入。
引号
- ":双引号,引用字符串,可以包含变量和命令替换。
- ':单引号,引用字符串,原样输出其中内容,不进行变量和命令替换。
- `:反引号,用于命令替换,执行命令并将结果替换到当前位置。例如,- `date`。
重定向
- >:输出重定向,将命令输出写入文件(覆盖)。
- >>:输出重定向,将命令输出追加到文件末尾。
- <:输入重定向,从文件读取命令输入。
- 2>:错误输出重定向,将错误输出写入文件(覆盖)。
- 2>>:错误输出重定向,将错误输出追加到文件末尾。
- &>:将标准输出和错误输出都重定向到同一文件中。
括号
- ():命令组,将一组命令放在子Shell中执行。
- {}:命令块,在当前Shell中执行一组命令。
其他
- *:通配符,匹配零个或多个字符。
- ?:通配符,匹配单个字符。
- [ ]:字符集,匹配方括号内的任意一个字符。