c-shell 和 bashell 的${filename:8:2}命令

rishairu
c-shell 和 bashell 的${filename:8:2}命令

我在用bashell 时写的程序,其中有一段程序
filename=abc_20080609.txt
month=${filename:8:2}
我想取06这两位数,是可以取出来的
但是我把程序拿到了hp-ux下,执行这句话 却报错说
[指定的置换对于这个命令是无效的]
这是两个shell有差异造成的么

blackold
回复 #1 rishairu 的帖子

没错,不同的shell支持的展开也不尽相同。man 一下你的shell。

rishairu
那么有什么可以替代的方法呢

blackold
回复 #3 rishairu 的帖子

肯定有替代方法,已经叫你参数相关shell的man了。别人不知道你用的是哪种shell.

棒棒堂
expr substr $filename 8 2

blackold
回复 #5 棒棒堂 的帖子

用系统命令的方法,不错。LZ的shell本身应该有解决此问题的相应参数展开。

寂寞烈火
[quote]原帖由 [i]rishairu[/i] 于 2008-7-1 09:35 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8707735&ptid=1185326][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
那么有什么可以替代的方法呢 [/quote]
sedawk都可以替代吧

rishairu
因为我是telnet到hu-unix上的,当man shell的时候,提示没有这个命令。
所以我暂时也不知道是什么shell
但是我的问题用fldname=$(echo $filename|awk '{print substr($0,9,2)}')
这种格式解决了,耽搁了时间,谢谢各位了

walkerxk
用ssh吧,telnet太不安全了。

blackold
回复 #8 rishairu 的帖子

try:[code]echo $SHELL [/code]

rishairu
/usr/bin/ksh
是ksh? 我以为是csh呢

我也不想用telnet 不过是他们要求的 没有办法

rishairu
不过各位写shell水平真的很高,解决问题也很快,我什么时候能到你们那种水平呢!

blackold
回复 #12 rishairu 的帖子

man ksh 查看 ksh的手册,应该有关于子字符串展开的。

经常上来回答别人的问题,很快你的shell水平就提高了,至少超过我这种菜鸟。

[[i] 本帖最后由 blackold 于 2008-7-1 13:42 编辑 [/i]]

rishairu
其实学东西学的是方法,结果是次要的,很感谢你教的方法

blackold
回复 #14 rishairu 的帖子

我想最好先了解shell基础知识,找本书来看,然后动写脚本(实践是最好的学习方法)。有空就看看别人写的代码,经常和别人交流。

walkerxk
[quote]原帖由 [i]blackold[/i] 于 2008-7-1 13:41 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8710835&ptid=1185326][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
man ksh 查看 ksh的手册,应该有关于子字符串展开的。

经常上来回答别人的问题,很快你的shell水平就提高了,至少超过我这种菜鸟。 [/quote]
完了,我只能当菜青虫了。

无声无息
[quote]原帖由 [i]walkerxk[/i] 于 2008-7-1 14:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8711077&ptid=1185326][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]

完了,我只能当菜青虫了。 [/quote]


完了,偶虫都不是

blackold
各位过谦了,看一下在CU的注册时间就知道了。

yhongy
回复 #17 无声无息 的帖子

俺只能当菜叶了:mrgreen: