Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238754
  • 博文数量: 68
  • 博客积分: 2802
  • 博客等级: 少校
  • 技术积分: 614
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-11 15:38
文章存档

2013年(3)

2012年(15)

2011年(21)

2010年(29)

我的朋友

分类: LINUX

2010-03-17 14:26:22

1.操作和扩展变量
${parameter}
与$parameter 相同,就是 parameter 的值.在特定的上下文中,只有少部分会产生${parameter}的混淆.可以组合起来一起赋指给字符串变量.

${parameter-default},${parameter:-default}
如果 parameter 没被 set,那么就使用 default.注意:${parameter-default}和${parameter:-default}大部分时候是相同的.额外的":"在 parameter 被声明的时候(而且被赋空值),会有一些不同.例:
   variable=
 # 变量已经被声明了,但是被设置为空.

 echo "${variable-0}" # (no output)
 echo "${variable:-1}" # 1

${parameter=default},${parameter:=default}
如果 parameter 未设置,那么就设置为 default.这两种办法绝大多数时候用法都一样,只有在$parameter 被声明并设置为空的时候,才会有区别和上边的行为一样.

${parameter+alt_value},${parameter:+alt_value}
如果 parameter 被 set 了,那就使用 alt_value,否则就使用 null 字符串.
这两种办法绝大多数时候用法都一样,只有在$parameter 被声明并设置为空的时候,会有区别,见下.
    param5=
a=${param5:+xyz}
echo "a = $a" # a =
# 与 a=${param5+xyz}有不同的结果.

${parameter?err_msg}, ${parameter:?err_msg}
如果 parameter 被 set,那就是用 set 的值,否则 print err_msg.
这两种办法绝大多数时候用法都一样,只有在$parameter 被声明并设置为空的时候,会有区别,见上.

2.参数替换和扩展
下边的表达式是使用 expr 字符串匹配操作的补充,这些特定的使用方法绝大多数情况都是用来分析文件目录名.

2.1变量长度/子串删除

${#var}  字符串长度($var 的字符数量).对于一个数组,${#array}是数组中第一个元素的长度.一些例外:
        ${#*}和${#@}将给出位置参数的个数.
        对于数组来说${#array[*]}和${$#array[@]}将给出数组元素的个数

${var#Pattern}, ${var##Pattern}
从$var 开头删除最近或最远匹配$Pattern 的子串.

${var%Pattern}, ${var%%Pattern}
从$var 结尾删除最近或最远匹配$Pattern 的子串.
     记住, # 和## 从字符串的左边开始,并且去掉左边的字符串, % 和 %% 从字符串的右边开始,并且去掉右边的子串.

2.2 变量扩展/子串替换

${var:pos}变量 var 从位置 pos 开始扩展.
${var:pos:len}从位置 pos 开始,并扩展 len 长度个字符
${var/Pattern/Replacement}使用 Replacement 来替换 var 中的第一个 Pattern 的匹配.
${var//Pattern/Replacement}全局替换.在 var 中所有的匹配,都会用 Replacement 来替换.如果 Replacement 被忽略的话,那么所有匹配到的 Pattern 都会被删除.
${var/#Pattern/Replacement}
如果 var 的前缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern.
${var/%Pattern/Replacement}
如果 var 的后缀匹配到了 Pattern,那么就用 Replacement 来替换 Pattern
 注意:必须在开头或结尾匹配,否则,将不会产生替换结果.
${!varprefix*}, ${!varprefix@}使用变量的前缀来匹配前边所有声明过的变量.如:
        xyz23=whatever
        xyz24=
        a=${!xyz*}    # 以"xyz"作为前缀,匹配所有前边声明过的变量.
        echo "a = $a" # a = xyz23 xyz24
        a=${!xyz@} # 同上.
        echo "a = $a" # a = xyz23 xyz24
阅读(1114) | 评论(0) | 转发(0) |
0

上一篇:字符串操作

下一篇:Sed学习笔记

给主人留下些什么吧!~~