这个脚本有什么作用?
我正在查看教程“高级自动依赖生成”,并找到了一个脚本:
%.P : %.c
....; [ -s $@ ] || rm -f $@
目标的那部分是做什么的?我知道我见过这样的语法: [...]||...
之前在 bash 脚本中,但我不记得它到底是如何工作的...
提前致谢!
I'm reviewing the tutorial "Advanced Auto-Dependency Generation" and found a script with this:
%.P : %.c
....; [ -s $@ ] || rm -f $@
What does that part of the target do? I know I've seen this syntax:[...]||...
before in bash scripts, but I can't recall how it works exactly...
Thanks in advance!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果前面的命令失败(即
[
),则执行后面的命令(rm
)。失败是一个非零返回码。If the preceding command fails (i.e.
[
), the following command is executed (rm
). Failure is a non-zero return code.测试
[ -s $@ ]
测试非空文件。序列
[ -s $@ ] ||因此,如果当前目标文件是空文件,则 rm -f $@
会删除当前目标文件(make
表示法中的$@
)。这是 shell 和 make 符号的有趣组合。
$@
部分是正在构建的目标的make
表示法。 (它也是 shell 脚本的完整参数列表的 shell 表示法,但在这种情况下,make
表示法优先于 shell 表示法 — shell 不会看到$ @
。)The test
[ -s $@ ]
tests for a file that is not empty.The sequence
[ -s $@ ] || rm -f $@
therefore removes the current target file ($@
inmake
notation) if it is an empty file.This is an interesting combination of shell and
make
notations. The$@
part ismake
notation for the target being built. (It is also a shell notation for the complete list of arguments to a shell script, but in this context, themake
notation takes precedence over the shell notation — the shell doesn't see$@
.)