您的位置:首页 > 运维架构 > Shell

shell当中的参数扩展

2014-09-10 16:14 148 查看
shell当中的参数扩展

1  

${parameter:-word}如果参数没有设定或者不存在,扩展的结果就是word的值,如果非空,就输出参数的具体数值

${parameter:=word}如果参数没有设定或者不存在,扩展的结果就是word的值,且这次操作会将word设定为parameter的值如果非空,就输出参数的具体数值

${parameter:?word}如果参数不存在或者没有设定,则执行脚本失败退出,并且把word作为标准出错提示输出到,如果存在输出参数的值.

${parameter:+word}如果参数没有设定或者不存在,没有任何的结果,如果存在,则输出结果是word的值,这样可以很好的数据隐藏起来。

例如:

$: temp=                                  //还没有设定值

$: echo ${temp:-"not set temp value"}     //因为没有设定,所以没有数据输出,就把"-"后面的文本作为提示输出

not set temp value

$: echo $temp                             //前面的操作不会对temp的值有任何的影响,所以输出内容无

$: echo ${temp:?"not set tmep value"}     //因为temp还是没有值,所以它现在的读取会错误,同时会把“?”后面的文本作为出错信息输出。

bash: temp: not set tmep value

$: echo ${temp:="true"}                   //temp没有值,这个输出操作会把"="后面的文本输出作为提示,同时并把这个文本作为temp的值进行赋值。

true

$: echo ${temp:+"temp has value"}         //因为temp现在有值所以现在输出"+"后面的文本

temp has value

$: echo $temp

true

2

${!prefix*}  =  ${!prefix@} 可以输出参数的名称,具体的是以prefix为前缀的变量名。

例如:

$: echo ${!BASH*}

BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_COMPLETION_COMPAT_DIR BASH_LINENO BASH_REMATCH BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION

$:

3

${#parameter} 输出parameter的字符串的长度

例如:

$: temp='true'

$: echo ${#temp}

4

4

${parameter:offset}

${parameter:offset:length}  输出parameter的结果子串(偏移offset,长度为length)

例如:

$: temp="I Love Linux Shell"

$: echo ${temp:6}

Linux Shell

$: echo ${temp:6:6}

Linux

5

${parameter#pattern}     输出parameter的结果子串(原串删除匹配pattern的子串)

${parameter##pattern}    输出parameter的结果子串(原串删除匹配pattern的最大子串)

例如:

[me@linuxbox ~]$ foo=file.txt.zip

[me@linuxbox ~]$ echo ${foo#*.}

txt.zip

[me@linuxbox ~]$ echo ${foo##*.}

zip

和前面两个一样,只不过是从后面开始的。

${parameter%pattern}

${parameter%%pattern}

例如:

[me@linuxbox ~]$ foo=file.txt.zip

[me@linuxbox ~]$ echo ${foo%.*}

file.txt

[me@linuxbox ~]$ echo ${foo%%.*}

6

${parameter/pattern/string}  匹配和一次替换

${parameter//pattern/string}  匹配全部替换

${parameter/#pattern/string}    从字符串的最前面开始匹配,匹配成功则替换,否则不变

${parameter/%pattern/string}    从字符串的最后开始匹配,匹配成功则替换,否则不变

例如:

$: temp='yeah yeah wow hum'

$: echo ${temp/yeah/YEAH}

YEAH yeah wow hum

$: echo ${temp//yeah/YEAH}

YEAH YEAH wow hum

$: echo ${temp/#yeah/YEAH}

YEAH yeah wow hum

$: echo ${temp/%hum/HUM}

yeah yeah wow HUM

$:

7

${parameter,,} 全部转换为小写的

${parameter,} 扩展变量后,将第一个字母小写,其他的不做处理

${parameter^^} 拓展变量,并是所有字母变成大写的

${parameter^}扩展变量后,将第一个字母大写,其他的不做处理

例如:

$: temp='I Love Linux'

$: echo ${temp,,}

i love linux

$: echo ${temp,}

i Love Linux

$: echo ${temp^^}

I LOVE LINUX

$: echo ${temp^}

I Love Linux

$:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: