Skip to content
GitHub

05.Bash String

Bash 所有代码除关键字外大部分变量默认为字符串

$ command="date"
$ $command                                       # 取 command 变量值 "date", "date" 作为命令执行
> Mon Jun 12 10:07:40 CST 2023                   # 执行 date, 打印日期

$ echo date                                      # date 被当作字符串, 作为 echo 的参数
> date

$ echo $("date")                                 # 执行 "date", 返回值作为 echo 的参数
> Mon Jun 12 10:23:46 CST 2023

${!var} 获取变量 var 的值, 并作为变量名引用

 $ name="petter"                                 # 定义变量 name, 值为 petter
 $ key="name"                                    # 定义变量 key, 值为 name
 $ echo ${!key}                                  # 使用 key 的值作为变量名, 并对该变量取值
 > petter                                        # 打印变量 petter

 $ cmd="date"
 $ var="cmd"
 $ ${!var}                                       # 获取变量 var 对应的变量名, 并对该变量取值
 > 2023年12月24日 星期日 12时50分38秒 CST          # 变量值 date 作为命令执行, 打印日期

Bash 默认第一个字符为指令, 后续值为字符串作为指令的参数
使用 $(command) 方式, 将字符串作为命令执行

${#s} 返回字符串的长度

$ s="123 456"; s="456 123"                       # 赋值
$ echo "s:${s}  length: ${#s}"                   # 获取长度
> s:456 123  length: 7                           # 打印

${variable^^} 字母全替换为大写
${variable,,} 字母全替换为小写

 $ var="ABC123xyz"
 $ echo ${var^^}
 > ABC123XYZ

 $ echo ${var,,}
 > abc123xyz
 $ echo "num: 22 index: 4" | grep -oE "[0-9]+"   # 筛选
 > 22 4

 $ echo $(ifconfig) | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}"
 > 127.0.0.1
 > 192.168.1.100

字符串通过 #(开头开始匹配) %(结尾开始匹配) 完成删除操作
最短匹配: ${variable#pattern} ${variable%pattern}
贪婪匹配:${variable##pattern} ${variable%%pattern}

字符串通过 /(替换一次) //(全替换) 完成替换操作
替换: ${variable/pattern/string} ${variable//pattern/string}

 $ date="2023-07-31"

 $ echo ${date#*-} ${date##*-}                   # # 从开头开始匹配, 只匹配最短内容 ## 贪婪匹配
 > 07-31 31
 $ echo ${date%-*} ${date%%-*}                   # % 从结尾开始匹配, 只匹配最短内容 %% 贪婪匹配
 > 2023-07 2023

 $ echo ${date/-/=}                              # 只替换一次
 > 2024=07-31
 $ echo ${date//-/=}                             # 全替换
 > 2023=07=01

 $ echo “num 1123 num” | sed 's/[0-9]//g'        # 删除全部数字
 > num num
 $ echo “abcdef” | sed 's/[a-z]/0/g'             # 字母全部替换为数字
 > 000000

${s:start:length}

$ s="01234"
$ echo "${s:0:3}"                                # 从序号 0 开始, 获取 3 个长度
> 012

expr index $string regex, 序号从 1 开始

 $ expr index "abcdef" "c"
 > 2