从函数内部检查脚本命令行参数

njk*_*015 2 bash

我有以下非常简单的脚本:

#!/bin/bash

checkCmdLineArgs() {
    echo -e "num input args $#"
    if (( $# == 0 )); then
        echo "$0 usage: install_dir home_dir"
        exit 255
    fi
}

checkCmdLineArgs
Run Code Online (Sandbox Code Playgroud)

这是行不通的.如果我像这样运行它:

./test.sh foo bar
Run Code Online (Sandbox Code Playgroud)

它输出:

num input args 0
./test.sh usage: install_dir home_dir
Run Code Online (Sandbox Code Playgroud)

知道为什么会失败吗?

Cha*_*ffy 5

里面的功能,$#,$@,和$1并向前指的是函数的参数列表,而不是脚本.($0是一个例外,并且仍然会引用脚本本身在第一个argv位置传递的名称;请注意,虽然这通常是脚本的名称,但这并不能保证是真的).

将脚本的参数传递给函数:

checkCmdLineArgs "$@"
Run Code Online (Sandbox Code Playgroud)