帶引數的函式
在 helloJohn.sh
:
#!/bin/bash
greet() {
local name="$1"
echo "Hello, $name"
}
greet "John Doe"
# running above script
$ bash helloJohn.sh
Hello, John Doe
-
如果不以任何方式修改引數,則無需將其複製到
local
變數 - 只需echo "Hello, $1"
。 -
你可以使用
$1
,$2
,$3
等來訪問函式內部的引數。注意: 對於超過 9 的引數,
$10
將不起作用(bash 將其讀作 $ 1 0),你需要做${10}
,${11}
等等。 -
$@
指的是函式的所有引數:#!/bin/bash foo() { echo "$@" } foo 1 2 3 # output => 1 2 3
注意: 你應該在
$@
周圍使用雙引號,就像這裡一樣。省略引號將導致 shell 擴充套件萬用字元(即使使用者專門引用它們以避免這種情況)並且通常會引入不受歡迎的行為甚至可能導致安全問題。
foo "string with spaces;" '$HOME' "*" # output => string with spaces; $HOME *
-
對於預設引數,請使用
${1:-default_val}
。例如:#!/bin/bash foo() { local val=${1:-25} echo "$val" } foo # output => 25 foo 30 # output => 30
-
要求引數使用
${var:?error message}
foo() { local val=${1:?Must provide an argument} echo "$val" }