免费注册 查看新帖 |

Chinaunix

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

请教一个函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-03 20:48 |只看该作者 |倒序浏览
请看该函数

get_config_every_line ()
{

if [ ! -d "$1" ]
then
echo "$1 wrong,check"
exit
else
chmod 777 -R $1/
fi

if [ ! -f "$1"/"$2" ]
then
echo "$2 wrong,check"
exit
fi

line1=`cat "$1"/"$2" | wc -l`
if [ "$line1" -ge 1 ]
then
for ((var1=1;var1<"$line1"+1;var1++))
do
export out1=`sed -n "$var1"p "$1"/"$2"`
done
out2=`cat "$1"/"$out1"`
else
echo ""$1"/"$2" null"
fi

}

$1为一个目录,$2为一个配置文件,有多行
比如a
下一行比如 b

out2就是 cat目录下/配置文件其中任意一行为 文件名的文件


之后函数被调用,按说 输出结果应该有多行 ,为何这里 输出结果 只有 最后一行 即 文件b cat后的内容,而cat a 文件的内容是没有的
这是什么问题,难道 函数中 变量如果有多个值,在函数外 调用函数 职能输出一个?

论坛徽章:
0
2 [报告]
发表于 2011-09-03 20:51 |只看该作者
不知道我说清楚了没有。

论坛徽章:
0
3 [报告]
发表于 2011-09-03 20:52 |只看该作者
大家谁可以帮帮我么?实在找不出资料哦。

论坛徽章:
0
4 [报告]
发表于 2011-09-03 23:36 |只看该作者
回复 2# kehanghuang

不明白!

要输出$2每行的内容适用循环进行遍历:
for out2 in `cat  $1/$2`
do
echo $out2
done

论坛徽章:
0
5 [报告]
发表于 2011-09-04 12:48 |只看该作者
回复 4# 南极雨


line1=`cat "$1"/"$2" | wc -l`
if [ "$line1" -ge 1 ]
then
for ((var1=1;var1<"$line1"+1;var1++))
do
export out1=`sed -n "$var1"p "$1"/"$2"`
done
out2=`cat "$1"/"$out1"`
else
echo ""$1"/"$2" null"
fi


首先 line1 是有多行的 for ((var1=1;var1<"$line1"+1;var1++))
其次 out1 结果输出的时候也是 多行的 。export out1=`sed -n "$var1"p "$1"/"$2"`
函数中,如果输出out1 比如 echo $out1 则是 依次取出。那么结果是多个结果

最关键的是 ,跳出函数后 ,调用函数时,这个out1的结果 只剩下最后一次 取得的值了。

我想要的是 在函数外,调用函数 ,out1的 输出结果不变,依旧是 多个结果。然后out2 的时候 也能输出多次结果 。 out2=`cat "$1"/"$out1"`
因为Out2 是从out1来的。


不知道这次说明清楚了没有。
请帮忙看看是什么情况导致 函数里的 变量多个结果 ,但在函数外 调用函数 echo 这个out1时 却变成 最后一个输出结果。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
6 [报告]
发表于 2011-09-04 15:02 |只看该作者
你要是想输出多个结果,应该在函数体内循环的时候输出,你在外面输出,当然是一个结果了,楼主没搞明白控制流程的基本概念吧。

论坛徽章:
0
7 [报告]
发表于 2011-09-04 15:25 |只看该作者
回复 6# xinglu1983


    OK 明白,
那如何在 函数体内 循环输出 的时候,如何在函数体外 将这些 循环输出 抓出来。?这是关键 。:wink:

论坛徽章:
0
8 [报告]
发表于 2011-09-04 15:28 |只看该作者
本帖最后由 南极雨 于 2011-09-04 15:37 编辑

回复 5# kehanghuang


  多看点如何给变量赋值的文章吧


这个out1的结果 只剩下最后一次 取得的值了 ::::: 这个是当然的, 因为sed 是按照行进行处理的,最后一次模式空间内只剩下最后以行的内容,自然是只赋值给out1了,

论坛徽章:
0
9 [报告]
发表于 2011-09-04 15:38 |只看该作者
回复 8# 南极雨


    好的,我找找去,如果没有,还得请教您呢。

论坛徽章:
0
10 [报告]
发表于 2011-09-04 15:49 |只看该作者
回复 9# kehanghuang


别客气,这里牛人多的是,只是周末而已!
我刚才又补充了一下,你看看,跟赋值没什么关系,是sed的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP