Bash 带参数的函数

示例

在helloJohn.sh:

#!/bin/bash

greet() {
  local name="$1"
  echo "Hello, $name"
}

greet "John Doe"
# running above script
$ bash helloJohn.sh
Hello, John Doe

  1. 如果您不以任何方式修改参数,则无需将其复制到local变量-simply echo "Hello, $1"。

  2. 您可以使用$1,$2,$3等访问函数内的参数。

    注意:对于超过9个的参数$10将不起作用(bash会将其读取为$1 0),您需要这样做${10},${11}依此类推。

  3. $@ 引用函数的所有参数:

    #!/bin/bash
    foo() {
     echo "$@"
    }
    foo 1 2 3 # output => 1 2 3

    注意:实际上,您应该始终"$@"像在此处那样在双引号周围使用双引号。

    省略引号会导致外壳扩展通配符(即使用户为了避免使用引号而特别引述),并且通常会引入不受欢迎的行为,甚至可能带来安全问题。

    foo "string with spaces;" '$HOME' "*"
    # output => string with spaces; $HOME *
  4. 对于默认参数使用${1:-default_val}。例如:

    #!/bin/bash
    foo() {
     local val=${1:-25}
     echo "$val"
    }
    foo     # output => 25
    foo 30  # output => 30
  5. 要求使用参数 ${var:?error message}

    foo() {
     local val=${1:?Must provide an argument}
     echo "$val"
    }