sort -k5nrが構文エラーではないのはなぜですか?


2
$ ls -l | sort -k 5 -n -r
$ ls -l | sort -k5nr

これら2つのコマンドが同じ出力を生成することがわかります。
私は結合することができますしかし、なぜ私は理解していない5n
なぜ構文エラーではないのですか?

編集:

$ ls -l | cut -d: -n -f 2    
$ ls -l | cut -d:nf2
cut: the delimiter must be a single character
Try `cut --help' for more information.

なぜ次のcutように振る舞わないのsortですか?

回答:


5

なぜならsort、あなたが期待する方法でこれらを解析する方法で実装されているからです。

こちらもご覧ください

  • オプションとその引数は一緒に実行されることもあれば、空白で区切られることもあれば、文字(通常は:または=)で区切られることもあります。したがって、「Prog -fFilename」、「Prog -f Filename」、「Prog -f:Filename」、「Prog -f = Filename」となります。
  • 一部のプログラムでは、単一文字のオプションを組み合わせることができます。他の人はしません。スイッチ "-fA"は、 "-f -A"と同じことを意味する場合もあれば、間違っている場合もあります。または、有効だが異なるパラメーターである場合もあります。

これは、両方の組み合わせのように見えます(空白なしで機能し、単一文字オプションの組み合わせ)。


それらは、引数の解析が異なる方法で実装されている単純に異なるプログラムです。

ではcoreutils8.13、次の比較::

  • src/sort.c4315行目、特別な整数解析関数を呼び出しparse_field_countて、最初の無効な文字を返します(つまり、数値が終了して次のオプションが開始されると)。これsortが引数を処理できる理由です。
  • src/cut.c、803行目以降、単にgetopt現在のオプションのパラメーターとして次の空白まですべてを解釈する通常の動作を使用しています。

sort一般的な規則に従っていますか?cutその方法では動作しません。
kev

@kev私の答えに追加の説明を追加しました。
ダニエルベック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.