web-dev-qa-db-ja.com

-rと-Rの違い

操作を再帰的に適用したいことがよくあります。 grepなどの一部のコマンドでは、小文字のrを使用して再帰を示します。例えば

grep -r foo .

他のコマンドは大文字のRを好むようです:

chmod -R 755 .

私は常にこれらを間違った方法で取得し、どれがどれかを忘れています。これらの引数のケースの選択の背後にあるロジックはありますか?

34
cjol

まったくありません。それは単に開発者が選択したものに依存します。多くの場合、-r-Rの両方が有効なオプションであるためです。あなたが引用したプログラムでは、例えば:

  • GNU grepの最近のバージョン:

    -r, --recursive
          Read all files  under  each  directory,  recursively,  following
          symbolic  links  only  if they are on the command line.  This is
          equivalent to the -d recurse option.
    
    -R, --dereference-recursive
          Read all files under each directory,  recursively.   Follow  all
          symbolic links, unlike -r.
    
  • chmodには-rオプションがないため、おそらく開発者は-Rを優先します。ただし、もちろん、-rは有効な権限文字列( 指摘 @Arkadiusz Drabczyksoによる)であるため、実際には使用できません。

8
terdon

ほとんどの場合、それは開発者の個人的な好みに起因します。ただし、開発者が再帰的に操作するなどよりも重要であると考えている何かに対して優先小文字オプションが採用されている場合は、大文字オプションが選択されることがあります。 chmodの場合-rは有効なモードです。例えば:

$ ll FILE
-rw-r--r-- 1 ja ja 0 Sep  9 16:42 FILE
$ chmod -r FILE
$ ll FILE
--w------- 1 ja ja 0 Sep  9 16:42 FILE
3

私は常にこれらを間違った方法で取得し、どれがどれであるかを忘れています

可能な場合は、GNUこれらのユーティリティのバージョンを使用してください。そうすれば、オプションに長い名前を使用できます。

command --recursive

これらの引数の大文字と小文字の選択の背後にあるロジックはありますか?

番号。

またはあまりない。 Unixユーティリティは少しずつ開発され、コマンドオプションは、リードまたは単独の開発者の個々の選択を反映します。使用できるのは26 ASCII小文字のオプション文字で、これは推奨されるセットです(コマンドは通常、入力しやすいように小文字です)。この限られたセットは、ニーモニックの競合を引き起こします。コマンド/ユーティリティの新しいバージョンが得られたときの不整合へ 新機能

1
RedGrittyBrick