带参数的函数
在 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" }