免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2705 | 回复: 6
打印 上一主题 下一主题

getopts在函数里怎么用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-24 12:09 |只看该作者 |倒序浏览
这样可以:

  1. while getopts "b:d:v:t:u:" opt
  2. do
  3.     case "$opt" in
  4.         b) board="$OPTARG";;
  5.         d) depth=$OPTARG;;
  6.         v) version="$OPTARG";;
  7.         t) release_tag="$OPTARG";;
  8.         u) update="$OPTARG";;
  9.        \?) check_option_helper;;
  10.     esac
  11. done
复制代码


为什么getopts用在全局的shell就可以,把它写进一个函数里就不可以呢?谢谢!

这样不行

  1. get_options()
  2. {
  3. while getopts "b:d:v:t:u:" opt
  4. do
  5.     case "$opt" in
  6.         b) board="$OPTARG";;
  7.         d) depth=$OPTARG;;
  8.         v) version="$OPTARG";;
  9.         t) release_tag="$OPTARG";;
  10.         u) update="$OPTARG";;
  11.        \?) check_option_helper;;
  12.     esac
  13. done
  14. }
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2009-04-24 12:40 |只看该作者
get_options "$@"

论坛徽章:
0
3 [报告]
发表于 2009-04-24 13:09 |只看该作者

回复 #2 waker 的帖子

依葫芦画瓢,呵呵
get_options $*

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2009-04-24 13:13 |只看该作者

回复 #3 volunteer01 的帖子

urscript "-b aaa" 对比一下,有时间读读13问

论坛徽章:
0
5 [报告]
发表于 2009-04-24 14:05 |只看该作者

回复 #4 waker 的帖子


  1. 函数同样可以接受参数,存放第一个参数,存放第二个参数,$*存放输入参数的列表,



  2. Bash shell 提供位置參數來擔任參數的傳遞工作。



  3. 例:sample2.sh p1 p2 p3 p4 p5 p6 p7 p8 p9



  4. 其中 p1 p2 p3 p4 p5 p6 p7 p8 p9 為欲傳入 sample2.sh 這支 shell的 9 個參數,此時,用 來代表 script 本身的檔案名稱, 代表第一個參數,也就是 p1, 代表第一個參數,也就是 p2,其它依此類推。



  5. $# 代表參數的總數,也就是 9。

  6. 代表這個程序的名稱,在這里就是 ”sample2.sh”

  7. $* 代表所有的參數,也就是 " p1 p2 p3 p4 p5 p6 p7 p8 p9"

  8. $@ 代表所有的參數,也就是 "p1" "p2" "p3" "p4" "p5" "p6" "p7" "p8" "p9"

  9. $* 和 $@ 的區別為:"$*" 代表 " p1 p2 p3 p4 p5 p6 p7 p8 p9",是將所有的參數作為一個整體字串來處理,而"$@" 代表 "p1" "p2" "p3" "p4" "p5" "p6" "p7" "p8" "p9",所有的參數還是分開的.

  10. shift 用來移動參數的位置,每執行一次,則所有的參數往左移一位,

  11. 使用set可用來重新設定位置參數,比如:set a b c d,表示重新設定 為 a, 為 b, 為 c, 為 d
复制代码


以上说明引自http://cache.baidu.com/c?m=9f65c ... 2752&user=baidu
不知对不对。

论坛徽章:
0
6 [报告]
发表于 2009-06-05 11:01 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2009-06-05 12:48 |只看该作者

回复 #5 volunteer01 的帖子

是这个区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP