LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 731|回复: 5

SHELL元编程问题?

[复制链接]
发表于 2008-12-7 13:18:38 | 显示全部楼层 |阅读模式

  1. function sv {
  2.   if [ -n "$*" ]; then
  3.     sudo vim $*
  4.   else
  5.     sudo vim .
  6.   fi
  7. }

  8. function v {
  9.   if [ -n "$*" ]; then
  10.     vim $*
  11.   else
  12.     vim .
  13.   fi
  14. }
复制代码


有没有类似:


  1. ['v','sv'].each do |x|
  2.   command = ( x == 'sv' ? 'sudo vim':'vim')

  3.   function x {
  4.   if [ -n "$*" ]; then
  5.     command $*
  6.   else
  7.     command .
  8.   fi
  9. }
复制代码


这种动态的定义函数的方法?
 楼主| 发表于 2008-12-7 18:11:04 | 显示全部楼层
没人帮帮吗?
  1. alias f1='fg 1'
  2. alias f2='fg 2'
  3. alias f3='fg 3'
  4. alias f4='fg 4'
  5. alias f5='fg 5'
复制代码

如果经常写此类的alias感觉太乱了……
  1. (1..5).each do |x|
  2. eval("alias f#{x}='fg #{x}'")
  3. end
复制代码
有没有像其它一些语言一样的这种用法吗?
回复 支持 反对

使用道具 举报

发表于 2008-12-7 18:20:59 | 显示全部楼层
闻所未闻,bash是很“低级”的。
回复 支持 反对

使用道具 举报

发表于 2008-12-7 18:38:57 | 显示全部楼层
EXPORT_FUNCTIONS() {
        while [ "$1" ]; do
                eval "$1() { ${ECLASS}_$1 ; }" > /dev/null
                shift
        done
}
http://www.gentoo.org/proj/en/de ... l?part=2&chap=2
回复 支持 反对

使用道具 举报

发表于 2008-12-7 18:53:03 | 显示全部楼层
Post by zhllg;1920537
EXPORT_FUNCTIONS() {
        while [ "$1" ]; do
                eval "$1() { ${ECLASS}_$1 ; }" > /dev/null
                shift
        done
}
http://www.gentoo.org/proj/en/de ... l?part=2&chap=2


赞!这个解决方法太强大了,原来一直以为 bash 很“初级”,想到到还有这样精彩的使用方式。:cool:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-7 19:22:23 | 显示全部楼层
没看明白乐哥的 ……
不过明白了不少了,那个fg的例子可以这样写
  1. for ((i=0;i<9;i++)) do
  2.   eval alias f$i=\'fg $i\';
  3. done
复制代码
  1. i='hello'
  2. eval function $i { echo 'world' \;}
复制代码
也可以通过上面的形式来定义函数 ……

哈哈,Shell 挺强大的

去修改我的 bashrc 去喽 ……
回复 支持 反对

使用道具 举报

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

本版积分规则

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