0

この質問は、このスレッドに基づいています。

コード

function man()
{       
    man "$1" > /tmp/manual; less /tmp/manual 
}

問題:オプションを 1 つでも使用すると、コマンドは必要なマニュアルがどこにあるかを認識しません。

例えば、

man -k find

参照が間違っているため、エラーが発生します。コマンド-kはマニュアル通りです。

疑似コードで問題を解決する私の試み

if no parameters
    run the initial code
if one parameter
    run: man "$2"
...

つまり、オプションチェックを最初に追加する必要があります。

擬似コード

    man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual

$n

  • オプションがゼロの場合、n=1
  • 1オプションの場合n=2
  • 2つのオプションの場合、n = 3
  • ....

$n の値を変更できるような「オプション チェック」を行うにはどうすればよいでしょうか。

展開問題: n=1 から n=2 までの状況に対して 2 つの if ループを作成する

4

2 に答える 2

2

すべての引数を渡すのはどうですか

function man()
{       
    man $@ > /tmp/manual; less /tmp/manual 
}

タイトルで言及されているlessのバグは何ですか?

于 2009-07-03T15:48:44.637 に答える
1

まず、ormanを使用して、関数のすべての引数を に渡すことができます。2 つの違いの正確な詳細を読むことができます。短編小説は、ほとんどの場合、二重引用符で使用することです。$*$@man sh"$@"

第二に、一時ファイルは不要です。manの出力を に直接パイプすることで、これを少しきれいにすることができますless

function man() {
    man "$@" | less
}

ところで、別のページャーを使用しようとしているだけの場合 (manを使用moreしていて、より凝ったものが必要な場合) 、デフォルトのページャーをオーバーライドするために設定できるless、一般的に認識されている環境変数があります。これをたとえば、出力の複数の画面を表示するときに使用するすべてのプログラムに指示PAGERするために、これを追加できます。~/.bashrcless

export PAGER=less

正確な質問に答えるには、次の方法で引数の数を確認できます$#

if [ $# -eq 0 ]; then
    : # No arguments
elif [ $# -eq 1 ]; then
    : # One argument
# etc.

shiftコマンドも役立つ場合があります。、などに名前が変更$2されます。コマンドライン引数を 1 つずつ処理するためにループでよく使用されます。$1$3$2

while [ $# -gt 1 ]; do
    echo "Next argument is: $1"
    shift
done

echo "Last argument is: $1"
于 2009-07-03T15:59:41.083 に答える