Re: [問題] 如何讓Shell Script裡的函數return 字串?
※ 引述《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)
推
01/17 23:41, , 1F
01/17 23:41, 1F
→
01/17 23:42, , 2F
01/17 23:42, 2F
→
01/17 23:44, , 3F
01/17 23:44, 3F
討論串 (同標題文章)
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章