簡體   English   中英

bash shell腳本函數定義(例如“ f(){}”)中使用的括號是什么? 與使用“功能”關鍵字不同嗎?

[英]What are the parentheses used for in a bash shell script function definition like “f () {}”? Is it different than using the “function” keyword?

我一直想知道它們的用途是什么? 如果您永遠無法在其中放入任何物品,似乎每次都將它們放入會很愚蠢。

function_name () {
    #statements
}

function關鍵字放在function的開頭,還有什么要收獲的?

function function_name () {
    #statements
}

為了支持POSIX規范的可移植性,不推薦使用關鍵字function ,而推薦使用function_name()

函數是用戶定義的名稱,用作簡單命令來調用具有新位置參數的復合命令。 通過“功能定義命令”定義功能。

函數定義命令的格式如下:

 fname() compound-command[io-redirect ...] 

請注意, { }不是強制性的,因此,如果您不打算使用關鍵字function (也不應該),則必須使用() ,以便解析器知道您正在定義函數。

例如,這是一個合法的函數定義和調用:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar
foo
bar

在您的第一個示例中,必須使用空括號,以便bash知道它是一個函數定義(否則它看起來像一個普通命令)。 在第二個示例中, ()是可選的,因為您使用過function

沒有function ,別名擴展會在定義時發生 例如:

alias a=b
# Gets expanded to "b() { echo c; }" :
a() { echo c; }
b
# => c
# Gets expanded to b:
a
# => c

但是,使用function時,別名擴展不會在定義時發生,因此別名會“隱藏”定義:

alias a=b
function a { echo c; }
b
# => command not found
# Gets expanded to b:
a
# => command not found
unalias a
a
# => c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM