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
最初の引数を「閉じる」ために使用されます。
これが見つかったら、--
ループを停止してパラメータを送信します。
今あなたはすべて持っています。後ろにオプションなので、以前と同様に位置引数を使用できます。