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

时间:2017-09-01 16:16:25

标签: bash

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

#!/bin/bash

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

checkCmdLineArgs

它不起作用。如果我像这样运行它:

./test.sh foo bar

输出:

num input args 0
./test.sh usage: install_dir home_dir

知道为什么会失败吗?

1 个答案:

答案 0 :(得分:5)

在函数内部,$#$@$1以及向前引用函数的参数列表,而不是脚本。 ($0是一个例外,它仍将引用脚本本身第一个argv位置传递的名称;请注意,虽然这通常是 脚本的名称,但这并不牢固保证是真的。)

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

checkCmdLineArgs "$@"