Bash Unix:如何仅使用管理文件!和名称中的$characters

Bash Unix:如何仅使用管理文件!和名称中的$characters,bash,unix,Bash,Unix,我正在学习unix(Bash)的基础知识,并创建了一个名为--$$包含文本——!!啊@@像这样: echo --\!\!agh\!@@ > --\!\!\$\$ //read cat --\!\!\$\$ cat "--\!\!\$\$" //delete rm --\!\!\$\$ rm "--\!\!\$\$" 现在,我尝试像这样读取和删除文件,但没有成功: echo --\!\!agh\!@@ > --\!\!\$\$ //read cat --\!\!\$\$ cat

我正在学习unix(Bash)的基础知识,并创建了一个名为--$$包含文本——!!啊@@像这样:

echo --\!\!agh\!@@ > --\!\!\$\$
//read
cat --\!\!\$\$
cat "--\!\!\$\$"

//delete
rm --\!\!\$\$
rm "--\!\!\$\$"
现在,我尝试像这样读取和删除文件,但没有成功:

echo --\!\!agh\!@@ > --\!\!\$\$
//read
cat --\!\!\$\$
cat "--\!\!\$\$"

//delete
rm --\!\!\$\$
rm "--\!\!\$\$"
我甚至读过关于非打印字符,并尝试将非打印字符转换为如下所示的可打印形式,但没有成功:

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

如何读取和删除此类文件?

问题不在于特殊字符-您正在正确转义它们。但是当文件名以
-
开头时(或者,通常,甚至只有一个
-
),命令会将其视为选项,而不是文件名。只需使用相对路径名,而不是空文件名。例如:

 cat './--!!$$'
并非所有命令都会这样处理前导破折号,但大多数命令都会这样处理。其中一些选项允许您使用哨兵来指示选项的结束,例如
--
本身。但是,shell本身可以很好地读取裸文件名:

cat <'--!!$$'

rm-->\!\\$\$
--
表示选项结束,实用程序将不再尝试将连字符解释为选项标记。谢谢。它正在工作。谢谢你的解释+1抱歉,我在
/
后面的空格处尝试错误回答。现在它按照你解释的方式工作。我认为这个答案是最好的+1.