回声:"Why need to use \ instead of \ to cancel the / character?"

echo: "Why need to use \\ instead of \ to cancel the / character?"

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

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

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

无效 ,而

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

完成任务。

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

之前的回答我没说清楚。最后一个命令发生了什么

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

基本上是 \ 转义下一个 \*\/* 只是像任何其他普通字符串一样被打印出来,就像 *something 或任何其他字符串 abc

实际上,您在这里要取消的不是 \ 字符的特殊行为,而是两个 * 字符的特殊行为!

我,我会用

echo '*/*'

echo "*/*"

或者,如果您想使用 \,最好的方法是

echo \*/\*

实际上,由于几乎肯定没有名为“*”的文件或目录,您通常只需

echo \*/*

echo */\*

你写的时候

echo *\/*

您要求查看子目录名称以 \ 结尾的任何子目录中所有文件的所有名称。可能没有任何这些,但如果你想看看发生了什么,请尝试调用

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

然后做你的

echo *\/*

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

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

如果您只想打印桌面上的文件夹,请使用 echo */

echo *\/* 将打印任何包含以 \ 结尾的文件夹的内容 而 echo *\/* 将打印任何文件夹中的任何内容,因为反斜杠 (\) 没有转义