如何在Bash中使用getopts接受长参数?

时间:2018-05-03 14:26:56

标签: bash shell getopts

我试图让我的getops函数运行多个标志和参数但不是短(-f样式)标志,我想接受一个长标记{{1}风格)。例如:

--flag

我希望if [ $# -lt 1 ]; then usage >&2 exit 1 else while $1 "hf:" opt; do case $opt in h) echo "Here is the help menu:" usage ;; f) ls -l $OPTARG >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 ;; :) echo "Option -$OPTARG requires an argument" >&2 exit 1 ;; esac done fi -h分别为-f--help

我该怎么做?

1 个答案:

答案 0 :(得分:1)

getopt会为您完成此操作。它处理短选项,长选项,带有和不带参数的选项,--来结束选项解析等等。

Boilerplate用法如下:

options=$(getopt -o hf: -l help,file: -n "$0" -- "$@") || exit
eval set -- "$options"

while [[ $1 != -- ]]; do
    case $1 in
        -h|--help) echo "help!"; shift 1;;
        -f|--file) echo "file! $2"; shift 2;;
        *) echo "bad option: $1" >&2; exit 1;;
    esac
done
shift

# Process non-option arguments.
for arg; do
    echo "arg! $arg"
done