unix 命令行中的“@”是什么意思?

juzqafwq  于 2023-08-04  发布在  Unix
关注(0)|答案(4)|浏览(242)

在某些东西(比如包含Java运行命令的类路径条目的文件的路径)前面加上“@”会有什么效果?
我知道这与文件内容有关,但你可以想象,试图在谷歌上搜索它有点困难。我也找不到一个关于它的手册页。

n3ipq98p

n3ipq98p1#

它在不同的程序中可能意味着不同的东西。作为一种约定,命令行中的@file可以解释为:
从文件读取命令行选项。将插入读取的选项以代替原始的@file选项。如果文件不存在或无法读取,则该选项将按字面意思处理,而不是删除。文件中的选项由空格分隔。空格字符可以包含在选项中,方法是用单引号或双引号将整个选项括起来。任何字符(包括反斜杠)都可以通过在要包括的字符前面加上反斜杠来包括。文件本身可能包含附加的@file选项;将递归地处理任何这样的选项。from ld docs for @file

klr1opcd

klr1opcd2#

@字符在Unix命令行中没有一般意义。它被一些流行的实用程序使用。Makefile中以@开头的命令告诉make在执行该行之前不要回显该行。GNU Autoconf将用configure发现的替换来替换@封闭的变量,如@srcdir@

sigwle7e

sigwle7e3#

Bash参考手册:
shell特别处理几个参数。这些参数只能参考;不允许分配给它们。
(...)
@
展开到位置参数,从1开始。当展开发生在双引号内时,每个参数都展开为一个单独的单词。也就是说,“$@”相当于“$1”“$2”……。如果双引号扩展出现在单词中,则第一个参数的扩展与原始单词的开始部分连接,最后一个参数的扩展与原始单词的最后部分连接。当没有位置参数时,“$@”和$@扩展为空(即,它们被移除)。
(...)
您可以在任何程序中使用@(at-sign)in参数,而无需转义。
如果你必须在参数中传递像这样的东西$@-你必须只转义$(美元符号)。

9jyewag0

9jyewag04#

Python argparse还内置了对@opts.txt的支持,如果使用fromfile_prefix_chars选项启用,则可以从文件opts.txt中获取CLI选项:在Python中允许在命令行重写配置选项的最佳方式是哪种?然而,该语法是如此疯狂,它可能与名为@myfile的实际文件发生冲突,因此很少使用。理智的版本,它问:how to get argparse to read arguments from a file with an option rather than prefix

相关问题