Unix:如何只管理文件!和名字中的$字符

时间:2017-01-07 18:56:00

标签: bash unix

我正在学习unix(Bash)的基础知识并创建了一个名为 - !! $$ 的文件,其中包含文字 - !! agh!@@ 喜欢这样:

echo --\!\!agh\!@@ > --\!\!\$\$

现在我试图没有成功读取和删除这样的文件:

//read
cat --\!\!\$\$
cat "--\!\!\$\$"

//delete
rm --\!\!\$\$
rm "--\!\!\$\$"

我甚至看过非打印字符,并尝试将不可打印的字符转换为可打印的字符,如下所示:

cat -v "--\!\!\$\$"

我如何阅读和删除此类文件?

1 个答案:

答案 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