Unix ツール: ファイル名に何かが付いていない場合はどうなるでしょうか?

Unix ツール: ファイル名に何かが付いていない場合はどうなるでしょうか?

私はいつも疑問に思っています。ほとんどの GNU/Unix ツールは、「マイナス何か」という形式のオプションを受け取り、その後に引数が続くことがあります。マイナス何かという名前のファイルがあったらどうなるでしょうか?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

または

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

これは単なる好奇心からであり、これを使用する例はありません。

答え1

という名前のファイルを削除するには-xrm -- -x(--オプションの終わりを意味します) または を使用しますrm ./-x

答え2

面接の場では、このような質問をよくします。ダッシュを含むファイルを処理する一般的な方法は、次のいずれかです。

$ rm -- -f
$ rm ./-f

答え3

Unix でよくある質問です。主な方法は、ファイルのフルパス名を指定することです。そのため、先頭にダッシュは付きません。

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

いくつかのコマンドでは、ダッシュを単独で(または二重ダッシュを使用して)オプションを終了できます。ただし、これは必ずしもすべてのコマンドに当てはまるわけではなく、異なるシステム上の同じコマンドにも当てはまるわけではありません。

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

答え4

使用する必要があります

  rm -- <filename>

元:

  rm -- -f

関連情報