我正在学习unix(Bash)的基础知识并创建了一个名为 - !! $$ 的文件,其中包含文字 - !! agh!@@ 喜欢这样:
echo --\!\!agh\!@@ > --\!\!\$\$
现在我试图没有成功读取和删除这样的文件:
//read
cat --\!\!\$\$
cat "--\!\!\$\$"
//delete
rm --\!\!\$\$
rm "--\!\!\$\$"
我甚至看过非打印字符,并尝试将不可打印的字符转换为可打印的字符,如下所示:
cat -v "--\!\!\$\$"
我如何阅读和删除此类文件?
答案 0 :(得分:1)
问题不在于特殊字符 - 您正确地逃避它们。但是当文件名以--
(或者通常只有一个-
)开头时,命令会将其视为选项而不是文件名。只需使用相对路径名而不是裸文件名。例如:
cat './--!!$$'
并非所有命令都会以这种方式处理前导破折号,但大多数命令都会。其中一些允许您使用标记来指示选项的结束,例如--
。但是,shell本身将读取裸文件名:
cat <'--!!$$'
这不会将任何参数传递给cat
; shell只是读取文件并将其提供给cat
的标准输入,因此选项解析不会进入。
点斜线技巧对于不是文件名的参数不起作用,但这又与命令有关。例如,如果您要使用-
搜索以grep
开头的模式,则可以使用-e
选项告诉它下一步是 e xpression而不是另一种选择:
$ read --help | grep -e -i
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
-i text use TEXT as the initial text for Readline