Shell 字符串截取方法

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

简单的组合也可以实现复杂的功能。

相关推荐