echo:"为什么需要使用\\而不是\来取消/字符?"

时间:2015-06-27 20:06:04

标签: shell echo

~/Desktop $ echo */*
unix/junk unix/save unix/xyxxy

我想取消斜杠,以便shell不再打印目录的文件。我发现了

~/Desktop $ echo *\/*
unix/junk unix/save unix/xyxxy

不起作用 ,而

~/Desktop $ echo *\\/*
*\/* 

完成这项工作。

有人可以解释为什么会这样吗?

4 个答案:

答案 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}一样}}