Bash-变量扩展variable expansion

1.字符串长度(string length)和字符串截取

${string:position:length} ##从指定位置输出指定长度的字符
var=1234567890
echo ${#var} ${var:2} ${var:-4} ${var:(-4)} ${var:1:3} 
> 10 34567890 1234567890 7890 234

类似字符串的处理还有awk
echo |awk '{print substr("'"${var}"'",2,3)}'
> 234
##awk在字符编号上和bash有所不同,awk从1开始编号,bash从0开始编号
echo |awk '{print index("'"${var}"'","234")}'
> 2 ##匹配字符串出现的位置
vim position.sh 
#!/bin/bash
echo "${#*} | ${*:2} | ${*:(-2)} | ${*:2:3}"
./position.sh 1 2 3 4 5 6 7 8 9 0
10 | 2 3 4 5 6 7 8 9 0 | 9 0 | 2 3 4 ##${*}代表全部的位置参数,也可以用【:】来进行处理

2.字符删除

${string#substring}  ##从头开始匹配,删除匹配到的最短的substring
${string##substring} ##从头开始匹配,删除匹配到的最长的substring
${string%substring}  ##从尾开始匹配,删除匹配到的最短的substring
${string%%substring} ##从尾开始匹配,删除匹配到的最长的substring
## 特别需要注意的是以上匹配内容必须从首字符或者尾字符开始
var=123abc123abc123
echo ${var#*a} ${var##*a} ${var%*a} ${var%%*a}
x='*c'
echo ${var##$x} ##匹配字符串可以用变量代替
> 123
##给txt重新命名
suff=txt;SUFF=TXT;for i in $(ls *.$suff);do mv ${i} ${i%.$suff}.$SUFF;done

3.字符替换(substring)

${string/substring/replacement} ##替换从头开始第一个匹配的字符串
${string//substring/replacement} ##替换全部满足条件的字符串
${string/#substring/replacement} ##替换从头第一个字符就匹配的字符串
${string/%substring/replacement} ##替换从尾第一个字符就匹配的字符串
var=abc123ABC123abc123ABC
echo ${var/abc/ABC} ${var//abc/ABC} ${var/#abc/ABC} ${var/%abc/ABC}
> ABC123ABC123abc123ABC ABC123ABC123ABC123ABC ABC123ABC123abc123ABC abc123ABC123abc123ABC
echo ${var//abc/} ${var/abc/} ## 替换字符为空时候可以用于删除匹配字符
> 123ABC123123ABC 123ABC123abc123ABC ##删除全部匹配字符和头部匹配字符

以上是匹配部分字符替换,还有参数替换用来处理和扩展变量【-】【:-】【=】【:=】【+】【:+】,在开始下面的参数替换的讲解以前,先要说明变量未声明、变量声明以及变量声明但未定义着三者的分类关系,后两者被认为是变量声明了,变量存在,前者变量不存在!

${parameter-default}, ${parameter:-default}
var1=1 var2=2;echo ${var1-$var2} ${var3-$var2}
> 1 2
var4=;echo ${var4-$var2} ${var4:-$var2}
>   2
##在变量未被声明的时候【-】符号后的内容被认为是缺省时的默认值
##变量声明了但是内容为空,不是缺省,【-】符号不会起作用,【:-】才会起作用
##和【-】符号作用相似的还有【=】符号,【=】符号和【-】符号最大的区别在于【=】会赋值!
var4=;echo ${var4-$var2} ${var4:-$var2} ${var4}
>   2  
var4=;echo ${var4=$var2} ${var4:=$var2} ${var4}
>   2  2

##【+】符号和【-】符号作用在处理声明和未声明变量的时候作用基本相反。
##【+】符号会给声明了得变量替换
##【:+】也会在变量声明了但为空的情况下出现反作用,不会替换
var=1 var2=2 var3=3 var4=
echo "${var3+$var2};${var3:+$var2};${var4+$var2};${var4:+$var2};${var5+$var2};${var5:+$var2}" 
> 2;2;2;;;

4.变量判断

##${var?Error Messages}判断变量是否存在,不存在输出Error Messages并返回错误状态1
vim position.sh
echo "${1?$0 usage arguments}"
./position.sh xyz;echo $?
> xyz
> 0
./position.sh;echo $?
> ./position.sh: line 1: 1: ./position.sh usage arguments
> 1

5.查询已声明变量

##${!varprefix*} ${!varprefix@} 匹配以varprefix开头的已声明变量
VARIABLE1=1 VARIABLE2=2 VARIABLE=
echo ${!VARIABLE*}
> VARIABLE VARIABLE1 VARIABLE2 ##即使是空变量,只要被声明了就能匹配
echo ${!BASH*} ##匹配与BASH有关的环境变量
> BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

6.特殊的变量扩展,大小写转换

a=xYzS
echo "${a^} | ${a^^} | ${a,} | ${a,,}" #第一个字符变成大写,全部字符大写,第一个字符变成小写,全部字符小写
> XYzS | XYZS | xYzS | xyzs
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇