我不明白为什么 * 在没有匹配项时会返回自身。这个答案表明情况确实如此,但我不明白这种行为的基本原理。为什么 * 或任何通用模式在不匹配的情况下不返回空字符串?
$ls # Look, no files
$touch a # Add a file
$echo * # Works as expected
a
$rm a # Remove the file
$echo * # Will output a '*'. Why not ''?
*
$* # Ok, * will fail, but how come the previous output?
-bash: *: command not found
$
Run Code Online (Sandbox Code Playgroud)
与任何文件都不匹配的模式被视为错误。您可以在 UNIX 的第一个版本中看到这一点。
glob会打印错误,并且它传递的命令永远不会运行。
错误消息是“不匹配”。
在源自Bourne(Unix 版本 7)的现代 shell 中,ls -l *.c
将生成错误“*.c:没有这样的文件或目录”。我想说这个消息更容易理解;它还指示失败的模式。
请注意,如果*.c
扩展为空,ls -l *.c
则会显示目录中的所有文件,并且不会打印错误。
bash 有一个failglob
更接近原始行为的选项。
归档时间: |
|
查看次数: |
2471 次 |
最近记录: |