機能ヘルプオプションの追加

機能ヘルプオプションの追加

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最初の引数を「閉じる」ために使用されます。

これが見つかったら、--ループを停止してパラメータを送信します。

今あなたはすべて持っています。後ろにオプションなので、以前と同様に位置引数を使用できます。

関連情報