主頁(yè) > 知識(shí)庫(kù) > 關(guān)于bash函數(shù)你可能不知道的一些事情(譯)

關(guān)于bash函數(shù)你可能不知道的一些事情(譯)

熱門(mén)標(biāo)簽:智能手機(jī) 檢查注冊(cè)表項(xiàng) 美圖手機(jī) 硅谷的囚徒呼叫中心 使用U盤(pán)裝系統(tǒng) 阿里云 網(wǎng)站建設(shè) 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式


關(guān)于bash函數(shù),這里有一些您不知道的東西。通常當(dāng)你寫(xiě)一個(gè)函數(shù)時(shí),你會(huì)這樣做:

function name () {
 ...
}

不是嗎?我知道你會(huì)這么做,因?yàn)檫@是所有人寫(xiě)函數(shù)的方式。這就是我要說(shuō)的。在bash中

{…}

并不像在JavaScript或c中那樣意味著“函數(shù)的主體”或“函數(shù)的范圍”,它實(shí)際上是一個(gè)復(fù)合命令。你可以做各種稀奇古怪的事情,比如:

function fileExists () [[ -f $1 ]]

不需要那些花括號(hào)!者你可以這樣做:

function isEven () (( $1 % 2 == 0 ))

這個(gè)函數(shù)是一個(gè)算術(shù)計(jì)算式?;蛘吣憧梢赃@樣做:

function name () (
 ...
)

這將在子shell中生成函數(shù),而不是在當(dāng)前環(huán)境中執(zhí)行。

或者您可以使用while, if, case, select和for。這里有一個(gè)例子:

function sleep1 () while :; do "$@"; sleep 1; done

這個(gè)函數(shù)將創(chuàng)建一個(gè)sleep1函數(shù),該函數(shù)將永遠(yuǎn)每秒運(yùn)行一個(gè)命令。您可以執(zhí)行類(lèi)似sleep1 df -h這樣的操作來(lái)監(jiān)視磁盤(pán)的更改。

這些技巧不僅使您的代碼更美觀,還能夠讓您快速的寫(xiě)出單行bash程序,而且它們也非常有用。如果您需要為您的函數(shù)創(chuàng)建一個(gè)臨時(shí)環(huán)境,并臨時(shí)更改變量或shell選項(xiàng),那么它將特別有用。

這是我在代碼中找到的一個(gè)例子:

function caseInsensitiveMatch () (
 shopt -s nocasematch
 ....
)

在這里,函數(shù) caseInsensitiveMatch在一個(gè)子shell中執(zhí)行,它能設(shè)置nocasematch選項(xiàng),它的作用域就是這個(gè)函數(shù)。對(duì)于IFS和其他變量,您通常需要臨時(shí)更改。你這樣就不需要保存以前的值,然后恢復(fù)它們。

這是我5分鐘的技巧。你可以在bash man頁(yè)面中查找復(fù)合命令,哪里有所有可能的用法。一旦掌握了這一點(diǎn),您將開(kāi)始編寫(xiě)一些next級(jí)別shell代碼。下次見(jiàn)!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

英文原文:Something you didn't know about functions in bash

標(biāo)簽:湖北 湘潭 懷化 賀州 山南 通遼 黃山 煙臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于bash函數(shù)你可能不知道的一些事情(譯)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266