参数扩展:linux
1.被名称引用的参数称做变量
2.被数字引用的参数称做位置参数
3.被特定符号引用的参数具备特殊的含义和用途,被称做Bash的特殊内部变量引用。bash
基本参数扩展:
字符$会引导参数扩展。大括号是可选的,可是大括号能够保护待扩展的变量,使得紧跟大括号后面的内容不会被扩展。
例:spa
1 $ PARAMETER 2 $ {PARAMETER} 3 #若是参数名后跟其余字符,大括号是必须的。 4
5 $ WORD=car 6 $ echo $WORDs
7 $ echo ${WORD}s 8 cars
对于$9后面的参数也是要用大括号的。
注意:参数名是大小写敏感的。code
间接参数扩展:blog
1 $ PARAMETER=TEMP 2 $ TEMP="It's indirect"
3 $ echo $PARAMETER 4 TEMP 5 $ echo ${!PARAMETER} 6 it's indirec
大小写修改(Bash4.0):ci
1 $ echo ${PARAMETER^} 2 #将参数的第一个字符改成大写 3 $ echo ${PARAMETER^^} 4 #将参数的所有字符改成大写 5 $ echo ${PARAMETER,} 6 #将参数的第一个字符改成小写 7 $ echo ${PARAMETER,,} 8 #将参数的所有字符改成小写 9 $ echo ${PARANETER~} 10 #将参数的第一个字符改成大写 11 $ echo ${PARANETER~~} 12 #将参数的所有字符改成大写
大小写修改实例:rem
1 # for file in *.txt 2 >do
3 >mv "$file" "${file,,}"
4 >done
变量名扩展:字符串
1 ${!PREFIX*} 2 ${!PREFIX@} 3 #列出以字符串PREFI开头的全部变量名
例:列出以BASH开头的全部变量名string
1 $echo ${!BASH*} 2 BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION
字符串移除:it
1 ${PARAMETER#PATTERN} 2 ${PARAMETER##PATTERN} 3 #移除从参数值的开头匹配指定模式的字符串 4 ${PARAMETER%PATTERN} 5 ${PARAMETER%%PATTERN} 6 #移除从参数值的结尾匹配指定模式的字符串 7 #”#“和”%“表示移除匹配指定模式的最短文本,”##“和”%%“表示移除匹配模式的最长文本。
字符串移除实例:
1 $ MYSTRING="This is used for removing string"
2 $ echo ${MYSTRING#* } 3 is used for removing string
4
5 $echo ${MYSTRING##* } 6 string
7
8 $echo ${MYSTRING% *} 9 This is used for removing 10
11 $echo ${MYSTRING%% *} 12 This
参数用途,提取文件名的一部分:
1 $ FILENAME=linux_bash.txt 2
3 $ echo ${FILENAME%.*} #移除文件名的后缀 4 linux_bash 5
6 $ echo ${FILENAME##*.} #移除文件名,保留后缀 7 txt 8
9 FILENAME=/home/book/linux_bash.txt 10
11 $ echo ${FILENAME%/*} #移除文件名,保留目录名 12 /home/book 13
14 $ echo ${FILENAME##*/} #移除目录名,保留文件名 15 linux_bash.txt
字符串的搜索与替换:
1 $ {PARAMETER/PATTERN/STRING} 2 $ {PARAMETER//PATTERN/STRING} 3 $ {PARAMETER/PATTERN} 4 $ {PARAMETER//PATTERN} 5 #操做符“/”和“//”分别表示只替换一个匹配的字符串和替换所有匹配的字符串,若是没有指定替换的字符串STRING,那便是替换为空,即删除。
例:
1 $ MYSTRING="This is used for replacing string or removing string" 2 $ echo ${MYSTRING/string/characters} 3 This is used for replacing characters or removing string 4 5 $ echo ${MYSTRING//string/characters} 6 This is used for replacing characters or removing characters 7 8 $ echo ${MYSTRING/string } 9 This is used for replacing or removing string 10 11 $ echo ${MYSTRING//string } 12 This is used for replacing or removing string 13 14 $ echo ${MYSTRING//string/ } 15 This is used for replacing or removing
求字符串的长度:
1 $ echo ${#PARAMETER}
获得参数值的长度:
1 $ MYSTRING="Hello World" 2 $ echo ${#MYSTRING} 3 11
子字符串扩展:
1 $ {PARAMETER:OFFSET 2 $ {PARAMETER:OFFSET:LENGTH}
从指定的位置开始截取指定长度的字符串;若是不指定截取的字符串长度,将会截取至末尾。
不指定长度:
1 $ MYSTRING="This is used for substring expansion." 2 3 $ echo ${MYSTRING:8} 4 used for substring expansion.
指定长度:
1 $ echo ${MYSTRING:8:10} 2 used for s
使用默认值:
1 ${PARAMTER:-WORD} 2 ${PARAMTER-WORD}
若是参数PARAMTER未定义或者为NULL时,这种模式或扩展WORD,不然会扩展参数PARAMTER;若是在PARAMTER和WORD之间未使用”:“时,只有参数PARAMTER未定义时,才会使用WORD。
1 $ unset MYSTRING 2 3 $ echo $MYSTRING 4 5 $ echo ${MYSTRING:-Hello World} 6 Hello World 7 $ echo MYSTRING 8 9 $ MYSTRING=HI 10 $ echo ${MYSTRING}:-Hello World 11 HI
指定默认值:
1 ${PARAMETER:=WORD} 2 ${PARAMETER=WORD}
此种模式和使用默认值的区别在于,不只扩展WORD,还将WORD的值赋值给参数PARAMTER,做为PARAMTER的值。
例:
1 $ unset MYSTRING 2 $ echo $MYSTRING 3 4 $ echo ${MYSTRING:=Hello World} 5 Hello World 6 7 $ echo $MYSTRING 8 Hello World
使用替代值:
1 ${PARAMTER:+WORD} 2 ${PARAMTER+WORD}
#若是参数PARAMTER是未定义的,或者其值未空时,这种模式将不扩展任何参数。若是参数PARAMTER是定义的,且其值不为空,这种模式会扩展WORD,而不是扩展PARAMTER的值。
1 $ MYSTRING="" 2 3 $ echo ${MYSTRING:+MOTE:MYSTRING seems to be set.} 4 5 $ MYSTRING="HI" 6 echo ${MYSTRING:+NOTE:MYSTRING seems to be set.} 7 NOTE:MYSTRING seems to be set