添加功能帮助选项

添加功能帮助选项

我有以下函数,可以NUM从一组文件的开头打印行。

命令(函数、脚本等)接受可变数量的参数,我想为“告诉我如何使用你”保留一个特殊选项,传统的选择是“help”、“-h”、“- ?”和“--帮助”。

headrc ()
{
    # Prints first set of lines from named files.
    # $1 NUM  Number of lines to print
    # $2 DIR  Directory

    num=$1
    dir=$2
      
    find "$dir" \( -name \*.org -o -name \*.texi \)  \
      | xargs head -n "$num";
}

答案1

您可以手动执行此操作,但使用getopt会更有用。例如考虑:

#!/bin/bash

# Prints first set of lines from named files.
# $1 NUM  Number of lines to print
# $2 DIR  Directory
headrc() {
    eval set -- $(getopt --name "${FUNCNAME[0]}" --options h --longoptions help -- "${@}")

    while [[ "${1}" != "--" ]]; do
        case "${1}" in
        -h | --help)
            printf "Usage: ${FUNCNAME[0]} [-h|--help] <args>\n"
            return 1
            ;;
        *)
            printf "Unknown option: ${1}\n"
            ;;
        esac

        shift # Shift off option
    done
    shift # Shift off --

    local -r num="${1}"
    local -r dir="${2}"

    find "${dir}" \( -name \*.org -o -name \*.texi \) | xargs head -n "${num}";
}

getopt工具采用现有参数 ( ${@}) 和您提供的选项,并对它们重新排序,使所有选项排在前面,然后是 a --,然后是其他所有选项。该--options选项指定单字符选项,而--longoptions指定“长”(多字符)选项。

例如:

$ getopt --options fh --longoptions file,help -- a b c -f d e --help g
 -f --help -- 'a' 'b' 'c' 'd' 'e' 'g'

请注意,它getopt支持带参数的选项,但由于您在这里不需要它,因此我没有介绍该工具的这方面内容。

eval set --参数更新为给定值,将函数视为其参数的内容重写为 的输出getopt

循环while处理选项;当遇到 时,选项停止--。如果是 see-h--help,它会打印一条帮助消息并返回。每次它处理循环时,它都会用来shift“关闭”第一个参数。

一旦找到它,它--就会停止循环,并转移该参数。

现在你已经拥有了一切选项,因此您可以像以前一样使用位置参数。

相关内容