作者dozer (piercing buddy?)
看板LinuxDev
标题Re: [问题] 如何让Shell Script里的函数return 字串?
时间Sat Jan 17 00:14:43 2009
※ 引述《milochen (N=NP)》之铭言:
: #!/bin/sh
: function func()
: {
: local lsh=$1
: local rsh=$2
: local ret=0
: local ret_str="$lsh_$rsh"
: echo -n ${ret_str}
: return $ret
: }
: $str="0123456789"
: echo $( echo ${str:2:3}) #印出 234
: echo $(func ab cd) # 愿望能印出 ab_cd
: 不好意思,小弟最近在思考,到底要如何把Bash 作到模组化
: 目前知道,像function 的 传入参数的观念,
: 可以靠$1, $2 与local宣告来达成近似的效果。
: 不过return 的部份,目前仍然只知道函数只能回传 数值,而非字串。
我之前也有稍微研究过一下,最後的结论是只能够用pipe达到这种效果
比如说
----------------------------------
#!/bin/bash
func() {
echo "arg1 is $1"
}
var=`func some_value`
echo "var is $var"
----------------------------------
bash基本上没有data type的概念:所有的东西都是string,
同时因为他的function使用上的限制,用bash要写出很模组化的
东西有相当的难度;bash有他方便的地方,而且也能解决大部分
『简单』的问题,但功能复杂到某个程度(比如说需要用到一维
以上的阵列)的时候,bash就会变得很别扭了。个人的心得是,
bash较适合如system admin之类需要呼叫大量外部程式且I/O不会
太复杂的工作。
因此我的建议是,如果你的应用真的需要比较复杂的功能跟高度
的模组化,可以改用弹性较大的直译式语言如perl或Python:他们
写起来不会比bash困难(有时候甚至更简单),功能却强大很多很多!
: 是因为我想要让 Bash 能够有个模组化的开发, 所以在思考用怎样的方式,
: 才能实现函数回传「字串」的概念。
: 在想不出来的情况下,在此请教版上各位高手了。
: 谢谢
: 一般来说,我自己是想到有两种办法可以实现函式回传字串的概念,
: 但都不是很好的方法 XD
: 方法一:
: 一个是使用全域变数 但我的理解里,
: 只知道这方法用下去,我可能自己把Shell Script写到很大时,会遇到维护上的难度
: 方法二:
: 把单一 function 写成一个档案,然後透过
: var1=$(source callfunc.sh arg1 arg2)
: var2=$(sh callfunc.sh arg1 arg2)
: 的方式来达成。 但是这样子又变成是一个档案写一个function了。
--
We are Microsoft. Unix is irrelevant. Openness is futile.
Prepare to be assimilated.
-- seen on slashdot.org
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.165.165.15
※ 编辑: dozer 来自: 118.165.165.15 (01/17 01:48)
1F:推 milochen:其实我是希望能用 Bash + C GTK+ 达到 01/17 23:41
2F:→ milochen:程式空间时间的efficiency 以及 portibility 01/17 23:42
3F:→ milochen:藉此增进 G系列 AP的开发速度,把PyGTK之类的考量bypass掉 01/17 23:44