免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Zelgadiss
打印 上一主题 下一主题

用数组作为参数 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-09-27 21:51 |只看该作者
干吗要这样写呢,我之前写的不行么
  1. func()
  2. {
  3.     local TMP=($1)

  4.     echo length: ${#TMP[@]}
  5.     echo index0: ${TMP[0]}
  6.     echo index1: ${TMP[1]}
  7. }


  8. ARRAY=(a b)

  9. echo length: ${#ARRAY[@]}
  10. echo index0: ${ARRAY[0]}
  11. echo index1: ${ARRAY[1]}

  12. func "${ARRAY[*]}"
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-09-28 02:38 |只看该作者
考虑出发点不一样吧
我是传入一个数组,然后根据数组长度
重新构建一个数组
换句话, 我这样可以在任何时候都重新构建一个数组
而你这样就只能给函数传数组
没有办法混合传递参数

比方说,我有四个参数,里面有一个是数组,那么你怎么办?

可能是个人习惯问题,我对于通用性考虑更多一点

论坛徽章:
0
13 [报告]
发表于 2006-09-28 09:38 |只看该作者
你自己看看,都没有认真看我的第一个帖子
  1. #!/bin/bash

  2. func()
  3. {
  4.     local TMP1=$1
  5.     local TMP2=($2)
  6.     local TMP3=$3
  7.     local TMP4=($4)

  8.     echo \$1: $TMP1
  9.     echo
  10.     echo \$2: length: ${#TMP2[@]}
  11.     echo \$2: index0: ${TMP2[0]}
  12.     echo \$2: index1: ${TMP2[1]}
  13.     echo \$2: index2: ${TMP2[2]}
  14.     echo
  15.     echo \$3: $TMP3
  16.     echo
  17.     echo \$4: length: ${#TMP4[@]}
  18.     echo \$4: index0: ${TMP4[0]}
  19.     echo \$4: index1: ${TMP4[1]}
  20. }

  21. ARGS1=args1
  22. ARGS2=(args2_0 args2_1 args2_2)
  23. ARGS3=args3
  24. ARGS4=(args4_0 args4_1)

  25. func $ARGS1 "${ARGS2[*]}" $ARGS3 "${ARGS4[*]}"
复制代码

论坛徽章:
0
14 [报告]
发表于 2006-09-28 09:53 |只看该作者
你有实际运行过吗?

你看一下二边求出的数组长度是不是一致的....
函数内和函数外

论坛徽章:
0
15 [报告]
发表于 2006-09-28 09:58 |只看该作者
是否是bash版本不一致?

我的bash:
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

下面是运行结果:
$1: args1

$2: length: 3
$2: index0: args2_0
$2: index1: args2_1
$2: index2: args2_2

$3: args3

$4: length: 2
$4: index0: args4_0
$4: index1: args4_1

论坛徽章:
0
16 [报告]
发表于 2006-09-28 10:00 |只看该作者
你的运行结果给我看看,函数体内外如何不一致了??

论坛徽章:
0
17 [报告]
发表于 2006-09-28 10:48 |只看该作者
GNU bash, version 2.05b.0(1)-release-(i386-redhat-linux-gnu)

$1: args1

$2: length: 1
$2: index0: (args2_0 args2_1 args2_2)
$2: index1:
$2: index2:

$3: args3

$4: length: 1
$4: index0: (args4_0 args4_1)
$4: index1:

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
18 [报告]
发表于 2006-09-28 10:49 |只看该作者
学习~

论坛徽章:
0
19 [报告]
发表于 2006-09-28 10:55 |只看该作者
原帖由 寂寞烈火 于 2006-9-28 10:49 发表
学习~


汗,烈火兄,你就寒碜我吧

论坛徽章:
0
20 [报告]
发表于 2006-09-28 16:02 |只看该作者
local TMP1=$1
    local TMP2=($2)
    local TMP3=$3
    local TMP4=($4)
在205b的bash里看视要这么写
local -a  变量名=xx
应该是版本差异
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP