Linux Shell 变量参数扩展教程

shell参数扩展说明

shell 参数扩展格式:

1
${expression}

expression 表达式可以为任意的字符,直到匹配到 ‘}’ 为止,因此表达式包含 ‘}’ 的话需要用转义或者用单引号包含起来。

值替换

1
2
3
4
5
6
7
8
9
10
11
${parameter:-word}
如果 parameter 为 null 或者未设置,整个参数替换表达式值为 word

${parameter:=word}
如果 parameter 为 null 或者未设置,整个参数替换表达式值为 word,并且 parameter 参数值设置为 word

${parameter:?word}
如果 parameter 为 null 或者未设置,则打印出错误信息。否则,整个参数替换表达式值为 $parameter

${parameter:+word}
如果 parameter 不为 null 或者未设置,则整个参数替换表达式值为 word

字符串替换

1
2
3
4
5
${parameter/pattern/string}
${parameter//pattern/string}
将 parameter 对应值的 pattern 字符串替换成为 string 字符串
/表示只替换一次
//表示全部替换

例子:

1
2
3
4
5
6
7
8
9
10
${parameter/pattern/string}

var="3/1/2/3333"
echo ${var/3/6}
6/1/2/3333

${parameter//pattern/string}
var="3/1/2/3333"
echo ${var//3/6}
6/1/2/6666

字符串长度

1
2
${#parameter}
获得字符串的长度

例子:

1
2
3
4
5
${#parameter}

var="Hello"
echo ${#var}
5

字符过滤

1
2
3
4
5
6
7
8
9
10
11
${parameter%word}
${parameter%%word}
word 支持通配符,从尾开始匹配 word,将匹配 word 正则表达式的字符删除
% 为最短匹配,%% 为最长匹配

${parameter#word}
${parameter##word}
word 支持通配符,从头开始扫描 word,将匹配 word 正则表达的字符删除
#为最短匹配,##为最长匹配

注意,匹配成功就停止继续匹配,也就是只匹配一次。最长匹配一般是针对通配符,能够匹配到最长字符串,也就是即时匹配成功,还会继续匹配,取最后一次匹配成功的。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
${parameter%word}

x=file.c
echo ${x%.c}.o
file.o

${parameter%%word}

x=posix/src/std
echo ${x%%/*}
posix

${parameter#word}

x=$HOME/src/cmd
echo ${x#$HOME}
/src/cmd

${parameter##word}

x=/one/two/three
echo ${x##*/}
three

See also

http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02

评论