今天在写一个shell脚本时,用到了选取子串。网上有个哥们做了很好的总结。http://my.oschina.net/aiguozhe/blog/41557。其中他说到选取子串 的方法:
str="abcdef"
expr substr "$str" 1 3 # 从第一个位置开始取3个字符, abc
expr substr "$str" 2 5 # 从第二个位置开始取5个字符, bcdef
expr substr "$str" 4 5 # 从第四个位置开始取5个字符, def
echo ${str:2} # 从第二个位置开始提取字符串, bcdef
echo ${str:2:3} # 从第二个位置开始提取3个字符, bcd
echo ${str:(-2)} # 从倒数第二个位置向左提取字符串, abcde
echo ${str:(-2):3} # 从倒数第二个位置向左提取3个字符, cde
我在#!/bin/sh脚本里用第二种办法,总是出错。后来我想也许是sh和bash不同的原因。因为几天前也碰到一个问题,用bash可以,sh就不行。然后我把脚本改成#!/bin/bash,果然就可以了。(我用的是ubuntu12.04, /bin/sh指向dash。)
而且在我机器上 ${str:(-2)} # 从倒数第二个位置向右提取字串,ef ${str:(-2):3} # 也是向右提取,不是向左提取。