$で始まる検索パターンをコマンドラインからlessに渡す方法

$で始まる検索パターンをコマンドラインからlessに渡す方法

$私はちょうどlessで始まる検索パターンを渡してみました。

less +/'\$l' myfile.pl

わかりました。

There is no -l option ("less --help" for help)

ドキュメントを読んだ後、代替-pオプションを試しました。

less -p'\$l' myfile.pl

同じエラーが発生しました。

それから発見しました。 (後のスペースに注意してください-p。)

less -p '\$l' myfile.pl

動作します。つまり、エラーメッセージなしでファイルを開き、最初の項目に移動します$l

長いオプションバリアントが--pattern=$l機能しない

less --pattern='\$l' myfile.pl
There is no -l option ("less --help" for help)

=そして仕事よりスペース

less --pattern '\$l' myfile.pl

これは

less -V
less 458 (POSIX regular expressions)
Copyright (C) 1984-2012 Mark Nudelman

openSUSE Leap 42.3から

今質問はこれがバグですか?

答え1

からman less

   --use-backslash
          This option changes the interpretations of options which  follow
          this one.  After the --use-backslash option, any backslash in an
          option string is removed and the following  character  is  taken
          literally.   This  allows a dollar sign to be included in option
          strings.

その後、バックスラッシュとドルを避ける必要があります。

less --use-backslash +'/\\\$l' myfile.pl

答え2

これは特徴。からman less

一部のオプション(-kや-Dなど)では、オプション文字の後に文字列が必要です。オプションの文字列は、ドル記号($)が見つかると終了したと見なされます。たとえば、MS-DOSでは、次のように2つの-Dオプションを設定できます。

LESS="Dn9.1$Ds4.1"

だからあなたはこれを行うことができます:

LESS='ppattern$i' PAGER=less man less

まず、検索では大文字と小文字を区別しませんlesspattern

--use-backslash\脱出するために使用することができます$

これで変数には意味がありますが、$LESSコマンドラインのオプションの引数にはほとんど意味がありません。この場合、報告できるバグと見なすことができます。

また、処理は$vsとvsの違いを説明するオプションを含むパラメータ$と同じパラメータで発生した場合にのみ発生するため、混乱が発生してエラーと見なされる可能性が高い理由があります。-p '\$l'-p'\$l'--pattern '\$l'--pattern='\$l'

次の問題も発生する可能性があります。

less -p' foo'

選択肢lessを見つける場所(もう一度選択肢を使用)詳細については、ソースコードの関数を確認してください。"foo"" foo"-p ' foo'scan_option()options.c

関連情報