sh和bash一些小差别

今天在写一个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} # 也是向右提取,不是向左提取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值