sh和bash一些小差别

来源:互联网 发布:英伟达游戏优化扫描 编辑:程序博客网 时间:2024/05/18 02:00

今天在写一个shell脚本时,用到了选取子串。网上有个哥们做了很好的总结。http://my.oschina.net/aiguozhe/blog/41557。其中他说到选取子串 的方法:

str="abcdef"expr substr "$str" 1 3  # 从第一个位置开始取3个字符, abcexpr substr "$str" 2 5  # 从第二个位置开始取5个字符, bcdefexpr substr "$str" 4 5  # 从第四个位置开始取5个字符, defecho ${str:2}           # 从第二个位置开始提取字符串, bcdefecho ${str:2:3}         # 从第二个位置开始提取3个字符, bcdecho ${str:(-2)}        # 从倒数第二个位置向左提取字符串, abcdeecho ${str:(-2):3}      # 从倒数第二个位置向左提取3个字符, cde

我在#!/bin/sh脚本里用第二种办法,总是出错。后来我想也许是sh和bash不同的原因。因为几天前也碰到一个问题,用bash可以,sh就不行。然后我把脚本改成#!/bin/bash,果然就可以了。(我用的是ubuntu12.04, /bin/sh指向dash。)

而且在我机器上 ${str:(-2)}  # 从倒数第二个位置向右提取字串,ef          ${str:(-2):3} # 也是向右提取,不是向左提取。

原创粉丝点击