Unix工具:如果文件名减去某物怎么办?


9

我一直在想:大多数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.

这只是出于好奇;我没有用例。


您必须找到一种将字串“ -f”直接传递给系统调用的方法。通常,这是通过仔细转义来实现的。
Flexo

2
到“因为没有主题而关闭”投票者:这是一个有关shell 编程以及如何避免问题的问题。SO完全是主题。(OTOH,它可能是重复的;问题正在找到其他相关问题。)
乔纳森·莱夫勒

Answers:


12

要删除名为的文件-x,请使用rm -- -x--表示选项的结尾)或rm ./-x


10

在面试环境中问这类问题是很常见的。使用破折号处理文件的常见方法是:

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

6

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.