[英]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.