LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: herberteuler

请问有没有实现字符串下标功能的方法

[复制链接]
 楼主| 发表于 2005-5-1 21:55:16 | 显示全部楼层
那么,如果我想作一个包管理工具的话,似乎应该用尽可能少的 shell 特性。我看了一些用脚本写成的程序 (如 GNU Libtool),没有使用 bash 数组。请问,这样的程序是否应该避免使用数组呢?
回复 支持 反对

使用道具 举报

发表于 2005-5-1 22:30:41 | 显示全部楼层
Post by herberteuler
那么,如果我想作一个包管理工具的话,似乎应该用尽可能少的 shell 特性。我看了一些用脚本写成的程序 (如 GNU Libtool),没有使用 bash 数组。请问,这样的程序是否应该避免使用数组呢?

I No zhidao
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-2 00:13:13 | 显示全部楼层
那么,请问其他的 Shell 如 ksh 和 csh 里有数组吗?或者,autotool 和 libtool 都必须在 bash 里执行,这样 bash 就是系统里必须的软件,从而我只要利用 bash 的功能就不必担心工具无法正常使用了?

非常感谢。
回复 支持 反对

使用道具 举报

发表于 2005-5-2 01:05:04 | 显示全部楼层
Post by herberteuler
那么,请问其他的 Shell 如 ksh 和 csh 里有数组吗?或者,autotool 和 libtool 都必须在 bash 里执行,这样 bash 就是系统里必须的软件,从而我只要利用 bash 的功能就不必担心工具无法正常使用了?

非常感谢。

1,bash,csh,sh,ksh 都可以自定义数组
2,bash不是必须的!他是可选的!
3,所谓你这些工具,修改一下环境,照样可以在非bash环境运行!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-2 11:40:59 | 显示全部楼层
下面是我写的一段程序,用来处理命令行选项。在我这里,除了 bash,csh 和 ksh 似乎可以执行。由于我第一次用 shell 开发程序,请您帮忙把把关(包括可移植性和编程习惯),谢谢
  1. XMK_ACCEPTS=(install)
  2. XMK_INSTALL=0

  3. MAKE_ARGUMENTS="-C -f -I -j -l -o -W"

  4. unset XMK_OPTS
  5. unset XMK_TARGETS
  6. IOPTS=0
  7. ITARS=0
  8. MINUS=0
  9. # be VERY careful when changing verify order
  10. while test ! -z $1 ; do
  11.         if test $1 = '--' ; then
  12.                 MINUS=1
  13.                 eval XMK_TARGETS[$ITARS]='--'
  14.                 ITARS=`expr $ITARS + 1`
  15.         elif test $MINUS -eq 0 && ( echo $MAKE_ARGUMENTS | grep -o -- $1 >/dev/null ) ; then
  16.                 eval XMK_OPTS[$IOPTS]=$1
  17.                 shift
  18.                 eval XMK_OPTS[`expr $IOPTS + 1`]=$1
  19.                 IOPTS=`expr $IOPTS + 2`
  20.         elif test $MINUS -eq 0 && ( echo $1 | grep '^-' >/dev/null ) ; then
  21.                 eval XMK_OPTS[$IOPTS]=$1
  22.                 IOPTS=`expr $IOPTS + 1`
  23.         elif test $MINUS -eq 1 && ( echo $1 | grep '^-' >/dev/null ) ; then
  24.                 eval XMK_TARGETS[$ITARS]=$1
  25.                 ITARS=`expr $ITARS + 1`
  26.         elif echo $1 | grep = >/dev/null ; then
  27.                 eval XMK_OPTS[$IOPTS]=$1
  28.                 IOPTS=`expr $IOPTS + 1`
  29.         else
  30.                 unset MATCHED
  31.                 unset J
  32.                 MATCHED=0
  33.                 J=0
  34.                 while test ! -z ${XMK_ACCEPTS[$J]} ; do
  35.                         if test $1 = ${XMK_ACCEPTS[$J]} ; then
  36.                                 MATCHED=1
  37.                                 eval XMK_`echo ${XMK_ACCEPTS[$J]} | tr a-z A-Z`=1
  38.                                 break
  39.                         fi
  40.                         J=`expr $J + 1`
  41.                 done
  42.                 if test $MATCHED -eq 0 ; then
  43.                         eval XMK_TARGETS[$ITARS]=$1
  44.                         ITARS=`expr $ITARS + 1`
  45.                 fi
  46.         fi
  47.         shift
  48. done
  49. unset MAKE_ARGUMENTS IOPTS ITARS MINUS MATCHED J
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-2 12:29:21 | 显示全部楼层
顺便问一下,这样写为什么不行?
  1. if test $XMK_`echo ${XMK_ACCEPTS[$I]} | tr a-z A-Z` -eq 1 ; then
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-2 13:05:12 | 显示全部楼层
晦涩!程序写成这个样子真是不敢恭维.........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-2 13:07:14 | 显示全部楼层
Post by Freebird
晦涩!程序写成这个样子真是不敢恭维.........

我想把 make 的选项里的目标和真正的选项分离出来,同时对 install 这样的目标做出特殊的处理,然后把处理结果直接送给 make。
最后一个应该怎样写呢?我试了好几种方法也不行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-2 18:17:20 | 显示全部楼层
我知道了,是
  1. eval test \$XMK_`echo ${XMK_ACCEPTS[$I]} | tr a-z A-Z`
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表