~/Desktop $ echo */*
unix/junk unix/save unix/xyxxy
我想取消斜杠,以便shell不再打印目录的文件。我发现了
~/Desktop $ echo *\/*
unix/junk unix/save unix/xyxxy
不起作用 ,而
~/Desktop $ echo *\\/*
*\/*
完成这项工作。
有人可以解释为什么会这样吗?
答案 0 :(得分:4)
实际上,您在此尝试取消的不是\
字符的特殊行为,而是两个*
字符的特殊行为!
我,我会用
echo '*/*'
或
echo "*/*"
或者,如果您想使用\
,最好的方法是
echo \*/\*
实际上,由于几乎可以肯定没有名为" *"的文件或目录,你通常可以通过
来逃脱echo \*/*
或
echo */\*
当你写
时echo *\\/*
您要求查看子目录名称以\
结尾的子目录中所有文件的所有名称。可能没有任何一个,但如果你想,看看发生了什么,尝试调用
mkdir x\\
touch x\\/y
touch x\\/z
然后做你的
echo *\\/*
一次。你应该看到x\/y x\/z
!
答案 1 :(得分:0)
单个反斜杠用于特殊序列,例如\n
。所以要插入一个真正的转义 - 反斜杠,你必须写\\
。
答案 2 :(得分:0)
如果您只想在桌面中打印文件夹,请使用echo */
echo *\\/*
将打印包含以\
结尾的文件夹的任何内容
而echo *\/*
将打印任何文件夹,因为反斜杠(\
)没有被删除
答案 3 :(得分:-1)
我没有用早先的答案清楚表明自己。最后一个命令发生了什么
~/Desktop $ echo *\\/*
*\/*
基本上\
正在逃避下一个\
而*\/*
正好像任何其他普通字符串一样打印,就像*something
或任何其他字符串{{1}一样}}