wangshaoM00 2012-07-06
Shell下截取字符串的功能非常少,不过有时在判断字符串前缀或是后缀时却非常重要。这里说的Shell不包含Bash和Csh,主要是给Freebsd下sh脚本使用的。例如下面的一个列子:
PRG_INFO_name="Make"
MKE_INFO_ACT="/bin/make"
Foo()
{
var=$1
#如果var是Name属性,则显示该变量,否则执行变量中的行为.
}
Foo"PRG_INFO_NAME"
Foo"MKE_INFO_ACT"
为了实现上面的功能,我们需要字符串截取来判断字符串是包含的"NAME"还是"ACT"来实现我们需要的功能。在Shell中包含了对变量的操作:
${var##*string}从左往右截取最后一次匹配上string右边的字符串
${var#*string}从左往右截取第一次匹配上string右边的字符串
${var%%string*}从右往左截取最后一次匹配上string左边的字符串
${var%string*}从右往左截取第一次匹配上string左边的字符串
我们现在来实现上面的代码:
PRG_INFO_name="Make"
MKE_INFO_ACT="/bin/make"
Foo()
{
localvar=$1
if["${var##*_}"="NAME"];then
evalecho$"$var"
elif["$var##*_}"="ACT"];then
evalexec$"$var"
fi
}
也可以判断前缀
PRG_INFO_name="Make"
MKE_INFO_ACT="/bin/make"
echo{$PRG_INFO_NAME%%_*}#返回:PRG
echo{$MKE_INFO_ACT%_*}#返回:MKE_INFO
简单的组合也可以实现复杂的功能。