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