帶引數的函式

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 變數 - 只需 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
    

    注意: 你應該在 $@ 周圍使用雙引號,就像這裡一樣。

    省略引號將導致 shell 擴充套件萬用字元(即使使用者專門引用它們以避免這種情況)並且通常會引入不受歡迎的行為甚至可能導致安全問題。

    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"
    }