短划线前缀是否对`ar`的行为有影响?

时间:2017-08-02 00:47:30

标签: unix static-libraries ar

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

  

如果您愿意,可以使用a开始第一个命令行参数   破折号。

但是,在手册页的其他任何地方都没有进一步提及破折号。由于我已经看到ar命令有和没有短划线,这留下了未解答的问题。

第一个命令行参数与-的前缀有什么影响(如果有的话)?

此外,如果我想保持跨系统的可移植性,让-或不拥有-更安全吗?

1 个答案:

答案 0 :(得分:1)

就GNU ar中的binutils而言,不使用短划线对减慢处理启动的影响非常小。

如果您检查所述野兽的源代码,您将在启动时很早就看到使用以下代码调用decode_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 diablo,则会在继续之前将其自动神奇地转换为ar -p -a -x diablo。顺便说一下,pax可能不是一个有效的选项集,我刚刚使用它,因为我太懒了,不能去查看man页面 - 但显然我没有花太多时间来解释我的决定: - )

就最大可移植性而言,看起来您最好使用非-参数,因为GNU ar将同时处理新表单,而较旧的ar变体很可能无法处理新表单。

但是,这可能只是我的CDO (a)倾向,我只是继续使用新表格,假设我不想支持这么老的系统他们没有最新的GNU东西。

(a)就像OCD一样,但是以正确的方式命令: - )