看板 LinuxDev 關於我們 聯絡資訊
※ 引述《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)
milochen:其實我是希望能用 Bash + C GTK+ 達到 01/17 23:41
milochen:程式空間時間的efficiency 以及 portibility 01/17 23:42
milochen:藉此增進 G系列 AP的開發速度,把PyGTK之類的考量bypass掉 01/17 23:44