lsに引数として `—`を指定すると、奇妙な動作になります

ls strange behavior when i give it `— ` as argument


質問 written by codeforester @2019-01-28 21:42:41Z

: 0 : 2 : 49

ls --を実行すると:

$ls --
a.out       ft_ls.c     ft_ls.h     ft_ls.h.gch libft`

現在のディレクトリのコンテンツを表示します。
ただし、 -だけは、「-」という名前のディレクトリのように解釈されます。

$ls -
ls: -: No such file or directory

およびls ---は無効なフラグです。

$ls ---
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

そして、デフォルトでファイル名として解釈されない理由を知ることができますか?

コメント 1

多くのプログラムが--をオプションリストの終わりを示すオプションとして認識するため、後続の引数は-で始まっていても非オプションとして扱われます。それを超えて、あなたが何を求めているのかは不明です。

written by ジョンボリンジャー @2019-01-24 21:50:38Z

コメント 2

@pmg Cを使用してlsを実装しようとしていますが、質問の間違ったフラグであることを忘れていました、ありがとう。

written by オーサマザザー @2019-01-24 21:51:37Z

コメント 3

一部のプログラムでは、オプションを引数から分離する[そして静かに吸収される]ので、 ls --と同様の規則をサポートしています。試してください: ls -- -lたとえば

written by クレイグエステイ @2019-01-24 21:51:59Z

コメント 4

Cタグを削除しました。POSIX Utility Syntax Guidelinesをお読みください。

written by pmg @2019-01-24 21:58:14Z

回答 1 written by usr @2019-01-24 21:51:54Z
2

-- 「オプションの終わり」のマーカーとして特別な意味を持ちます。 一方、 ---または-は特別な意味はありません。

POSIX規約は次のとおりです。

オプション引数ではない最初の-引数は、オプションの終わりを示す区切り文字として受け入れる必要があります。 次の引数は、「-」文字で始まる場合でもオペランドとして扱われる必要があります。

lsを実装する場合は、 getopt関数の使用に興味があるかもしれませんlsコマンドと同様のオプション処理を簡単に実装できます。

回答 2 written by エリック・ゴンザレス @2019-01-28 21:27:14Z
0

ls --コマンドを実行する必要がある場合がいくつかあります。

たとえば、 -file.pdfようにダッシュ( - )で始まるファイルがある場合は、次のようになります。 lsをオプションとともに使用すると、エラーが発生します。 lsを二重ダッシュlsとともに使用する必要があります。これは、ダッシュが付いた後のすべてを無視し、*を付けてファイル名を入力するようにLinuxに指示します。

ls -- *.pdfを使用して、ディレクトリの内容を表示できます。