2015-06-27 106 views
0
~/Desktop $ echo */* 
unix/junk unix/save unix/xyxxy 

我想取消斜杠,以便shell不再打印目录的文件。我发现,echo:“为什么需要使用\而不是来取消/字符?”

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

不起作用 ,而

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

做这项工作。

有人可以解释为什么会发生这种情况吗?

回答

4

其实,你'试图取消这里并不是\角色的特殊行为,而是两个*角色的特殊行为!

我,我会用

echo '*/*' 

echo "*/*" 

或者,如果你想使用\,最好的方式做这将是

echo \*/\* 

其实,因为几乎肯定没有名为“*”的文件或目录,所以通常可以离开w第i只

echo \*/* 

echo */\* 

当你写

echo *\\/* 

你问到看到所有的任何子目录在子目录名称中\结束的所有文件名。有可能没有任何这些,但如果你想,看看发生了什么事情,尝试调用

mkdir x\\ 
touch x\\/y 
touch x\\/z 

,然后你

echo *\\/* 

再做。你应该看到x\/y x\/z

+0

您认为哪一种是上述最佳做法?使用''或\为什么? – Molnia

+0

@Molnia:通常,我更喜欢在大部分时间使用''“',特别是如果我想要扩展shell变量的话。如果我绝对不想在内部扩展shell变量,或者在一些复杂的情况下嵌套''''和'''''',我会使用''''。如果可以的话,我通常会远离“自己”,因为他们中的不止两个人会感到困惑,并且难以真正快速阅读。 –

-1

我之前的回答并没有让自己清楚。什么是与最后一个命令发生

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

基本上\是逃避未来\*\/*才刚刚打印像任何其他普通字符串就像它*something或任何其他字符串发生abc

0

单个反斜杠用于特殊序列,例如\n。所以要插入一个真正的转义反斜杠,你必须写\\

0

如果你想要的是打印您的桌面内的文件夹,然后用echo */

echo *\\/*将打印任何withing与\echo *\/*将打印任何withing任何文件夹中的反斜杠结尾的文件夹(\)是没有sc 012

相关问题