破折号前缀对"ar"的行为有什么影响吗?



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

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

但是,手册页中没有其他任何地方进一步提及破折号。由于我已经看到了带破折号和不带破折号的ar命令,因此这留下了一个悬而未决的问题。

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

此外,如果我想保持跨系统的可移植性,那么拥有-还是没有-更安全?

就 GNUbinutils中的ar而言,不使用破折号对减慢处理启动的影响非常小。

如果你检查了所述野兽的源代码,你会在启动的早期看到一个调用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] = '';
/* 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页面 - 但显然我没有问题花费过多的时间解释我的决定:-(

就最大可移植性而言,您似乎最好使用非-参数,因为 GNUar将同时处理该形式新形式,而旧的ar变体很可能不会处理新形式。

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


(a( 就像强迫症一样,但以正确的方式排序:-(

相关内容

  • 没有找到相关文章