2012-10-23 154 views
0

把“@”放在什么地方(比如包含Java运行命令的类路径条目的文件的路径)之前会产生什么影响?命令行中的“@”是什么意思?

我知道这与文件内容有关,但您可以想象在Google上搜索它有点困难。我找不到一个可以谈论它的联机帮助页。

+0

我认为这意味着'读取由这个名字提名的文件(命名文件中的每一行代表一个条目)''而不是'这是条目'。 –

+0

这些标签表明您在谈论unix shell,文本显示为java。请澄清。请提供一个例子,即使它很混乱。 – Marian

+0

@Marian看起来他想要从命令行运行java程序,并且在该程序的参数中有“@”字符。 – Kamil

回答

1

它可能意味着不同的程序在不同的事情。作为命令行上的惯例@file可以解释为:

从文件中读取命令行选项。读取的选项插入原始@file选项的 位置。如果文件不存在,或者不能读取 ,那么该选项将被逐字处理,而不会被删除。 文件中的选项由空格分隔。通过围绕 中的整个选项(单引号或双引号),空白字符 可以包含在选项中。任何字符(包括反斜杠) 都可以包含在字符前加上 反斜杠。该文件本身可能包含其他@file选项;任何 这样的选项将被递归处理。 from ld docs for @file

1

@字符在Unix命令行上没有一般含义。它有一些受欢迎的实用程序使用。以@开头的命令Makefile告诉make在执行该命令之前不要回显该行。 GNU Autoconf将替换@-包含的变量,例如@[email protected],其替代项由configure发现。

+0

哦,这取决于你正在使用的外壳? –

+0

你似乎描述的根本不是贝壳的东西。 – user4815162342

+0

那么它在java运行的情况下会来自哪里呢?我怀疑它来自java二进制文件。 –

1

Bash Reference Manual

shell对几个参数进行特别处理。这些参数可能只有 被引用;不允许分配给他们。

(...)

@

展开为位置参数,从1开始。当在双引号内出现 扩展时,每个参数将扩展为一个单独的单词 。也就是说,“$ @”相当于“$ 1”“$ 2”...。如果 双引号扩展出现在单词中,则将 第一个参数的扩展连接到原始单词 的开头部分,并将最后一个参数的扩展连接到原始单词的最后一个 部分。当没有位置参数时, “$ @”和$ @展开为空(即,它们被移除)。

(...)

可以在参数中使用@(at符号)的任何程序,而不逃逸。

如果您必须在参数中传递类似[email protected]的内容,您只需要转义$(美元符号)。

+0

我也见过@ $ someVar。这完全无关吗? –

+0

不知道。无论如何,你可以在脚本/命令中使用它。它不需要转义。 – Kamil

相关问题