这个脚本有什么作用?

发布于 2024-11-07 11:11:59 字数 204 浏览 0 评论 0原文

我正在查看教程“高级自动依赖生成”,并找到了一个脚本:

 %.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

错々过的事 2024-11-14 11:11:59

如果前面的命令失败(即[),则执行后面的命令(rm)。失败是一个非零返回码。

If the preceding command fails (i.e. [), the following command is executed (rm). Failure is a non-zero return code.

日暮斜阳 2024-11-14 11:11:59

测试 [ -s $@ ] 测试非空文件。

  • 如果文件不为空,请勿删除它。
  • 如果文件为空,则删除该(空)文件。

序列 [ -s $@ ] ||因此,如果当前目标文件是空文件,则 rm -f $@ 会删除当前目标文件(make 表示法中的 $@)。

这是 shell 和 make 符号的有趣组合。 $@ 部分是正在构建的目标的 make 表示法。 (它也是 shell 脚本的完整参数列表的 shell 表示法,但在这种情况下,make 表示法优先于 shell 表示法 — shell 不会看到 $ @。)

The test [ -s $@ ] tests for a file that is not empty.

  • If the file is not empty, do not remove it.
  • If the file is empty, remove the (empty) file.

The sequence [ -s $@ ] || rm -f $@ therefore removes the current target file ($@ in make notation) if it is an empty file.

This is an interesting combination of shell and make notations. The $@ part is make 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, the make notation takes precedence over the shell notation — the shell doesn't see $@.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文