自己电脑做电影网站吗,网站建设 答辩记录,成都专业做网站的公司有哪些,南通做外贸的公司网站简短的回答像其他人所说的那样 - 你应该总是引用变量来防止奇怪的行为。所以使用echo“$ foo”代替echo $ foo。长期回答我确实认为这个例子值得进一步解释#xff0c;因为它的表面看起来比它看起来更多。我可以看到你的困惑在哪里#xff0c;因为在你运行你的第一个例子后因为它的表面看起来比它看起来更多。我可以看到你的困惑在哪里因为在你运行你的第一个例子后你可能会认为shell显然正在做参数扩展文件名扩展所以从你的第一个例子me$ FOOBAR * BARme$ echo $FOO参数扩展后相当于me$ echo BAR * BAR文件名扩展后相当于me$ echo BAR file1 file2 file3 file4 BAR如果只输入echo BAR * BAR命令行您将看到它们是等效的。所以你可能会想到“如果我逃避*我可以阻止文件名扩展”所以从你的第二个例子me$ FOOBAR \* BARme$ echo $FOO参数扩展后应相当于me$ echo BAR \* BAR文件名扩展后应相当于me$ echo BAR \* BAR如果您尝试直接在命令行中键入“echo BAR \ * BAR”它将确实打印“BAR * BAR”因为转义会阻止文件名扩展。那么为什么使用$ foo不起作用这是因为发生了第三次扩张 - 报价清除。从bash手册中删除引用是在前面的扩展之后所有未引用的字符“\”“”和“”的出现都将被删除这些字符不是由上述扩展之一产生的。所以当你直接在命令行输入命令时转义字符不是先前扩展的结果所以BASH在将它发送到echo命令之前将其删除但在第二个例子中“\ *”是先前参数扩展的结果因此不会被删除。结果echo收到“\ *”这就是它打印的内容。请注意第一个示例之间的差异 - “*”不包括在将被删除的字符中删除的字符中。我希望这是有道理的。最后得出的结论 - 只是使用引号。我只是想我会解释为什么转义如果只有参数和文件名扩展在起作用它在逻辑上应该起作用不起作用。有关BASH扩展的完整说明请参阅