Unix 破折号前缀对'ar'的行为有影响吗?

Unix 破折号前缀对'ar'的行为有影响吗?,unix,static-libraries,unix-ar,Unix,Static Libraries,Unix Ar,在ar实用程序的手册页中,我看到以下行 如果愿意,可以在第一个命令行参数开头使用 冲刺 然而,手册页中其他地方没有进一步提到破折号。因为我已经看到了带破折号和不带破折号的ar命令,这就留下了一个悬而未决的问题 在第一个命令行参数前面加上-前缀会产生什么影响(如果有的话) 此外,如果我想保持跨系统的可移植性,使用-还是不使用-更安全?就GNUbinutils中的ar而言,不使用破折号会降低处理启动的速度 如果您检查上述beast的源代码,您将在启动的早期看到一个调用decode\u options

ar
实用程序的手册页中,我看到以下行

如果愿意,可以在第一个命令行参数开头使用 冲刺

然而,手册页中其他地方没有进一步提到破折号。因为我已经看到了带破折号和不带破折号的
ar
命令,这就留下了一个悬而未决的问题

在第一个命令行参数前面加上
-
前缀会产生什么影响(如果有的话)


此外,如果我想保持跨系统的可移植性,使用
-
还是不使用
-
更安全?

就GNU
binutils
中的
ar
而言,不使用破折号会降低处理启动的速度

如果您检查上述beast的源代码,您将在启动的早期看到一个调用
decode\u options()
,代码如下:

/* Convert old-style tar call by exploding option element and rearranging
   options accordingly. */

if (argc > 1 && argv[1][0] != '-')
{
    int new_argc;       /* argc value for rearranged arguments */
    char **new_argv;    /* argv value for rearranged arguments */
    char *const *in;    /* cursor into original argv */
    char **out;         /* cursor into rearranged argv */
    const char *letter; /* cursor into old option letters */
    char buffer[3];     /* constructed option buffer */

    /* Initialize a constructed option.  */

    buffer[0] = '-';
    buffer[2] = '\0';

    /* Allocate a new argument array, and copy program name in it.  */

    new_argc = argc - 1 + strlen (argv[1]);
    new_argv = xmalloc ((new_argc + 1) * sizeof (*argv));
    in = argv;
    out = new_argv;
    *out++ = *in++;

    /* Copy each old letter option as a separate option.  */

    for (letter = *in++; *letter; letter++)
    {
        buffer[1] = *letter;
        *out++ = xstrdup (buffer);
    }
因此,如果您提供了一个老式的选项,例如使用
ar pax暗黑破坏神
,它将自动神奇地将其转换为
ar-p-a-x暗黑破坏神
,然后继续。顺便说一句,
pax
可能不是一个有效的选项集,我之所以使用它,是因为我懒得去看
man
页面,但显然我花太多时间解释我的决定没有问题:-)

就最大可移植性而言,似乎您最好使用非
-
参数,因为GNU
ar
将处理该参数和新表单,而较旧的
ar
变体很可能不会处理新表单

但是,这可能只是我的CDO(a)倾向,我会继续使用新的形式,假设我真的不想支持如此古老的系统,它们没有最新的GNU内容



(a) 就像OCD一样,但顺序是正确的:-)

我认为不处理
-
选项的
ar
版本必须非常古老,就像在SystemV Unix之前,也就是80年代或70年代早期一样。与
tar类似
。如果我真的在吹毛求疵,我会注意到不是用破折号让事情变慢,也不是用破折号——但我最初的印象是,你的回答暗示了相反的意思。@Jonathan,是的,这样读起来很容易。已经澄清。