分页: 1 / 1

怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-17 18:04
fanhe
已知道用 [[ 可以实现

代码: 全选

[[ "$1" == "$b"* ]]
但是用 [ 没法这样做
[[ 是bash内建命令,其他shell例如dash可没有
我想问,用 [ 怎么实现?

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-17 18:08
delectate
1.用正则
2.用字符处理的函数/方法,截取第一个字符对比
3.调用第三方命(grep,egrep)

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 8:55
trigger
echo "asfdfjdlkj"|sed '/^a/d'
空则真

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 9:07
poweroff
呵呵。

代码: 全选

echo |sed '/^a/d'
为什么不用grep

同样

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 10:03
eexpress
bash 支持正则比较的啊。都不学无术。

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 11:10
fanhe
eexpress 写了:bash 支持正则比较的啊。都不学无术。
debian默认shell是dash,dash不支持正则比较,也没有双中括号
要写init的话,都不能用bash的扩展语法
除非,把默认shell改掉了,但是听说,dash速度比bash快,改成bash的话,开机也就变慢了

所以还是要写兼容性最好的脚本

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 12:11
aerofox
可以用 expr 命令,: 操作符。

Re: 怎么测试一个字符串是不是由某特定字符串开头?

发表于 : 2010-10-18 12:19
aerofox
也可以从 $1 中去掉开头的 $b,如果仍然为 $1,则表示不是以 $b 开头的。

代码: 全选

if [ "${1#$b}" != "$1" ]; then
    echo "第一个参数是以 $b 开头的"
else
    echo "第一个参数不是以 $b 开头的"
fi