破折号前缀对 `ar` 的行为有影响吗?
Does the dash prefix have any effect on the behavior of `ar`?
在 ar
实用程序的手册页中,我看到以下行。
If you wish, you may begin the first command-line argument with a
dash.
但是,手册页中的其他任何地方都没有进一步提及破折号。由于我已经看到 ar
带有和不带有破折号的命令,所以这留下了未解决的问题。
在第一个命令行参数前加上 -
有什么影响(如果有的话)?
此外,如果我想保持跨系统的可移植性,使用 -
还是不使用 -
哪个更安全?
就 GNU binutils
中的 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] = '[=10=]';
/* 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) 就像强迫症一样,但以正确的方式订购:-)
在 ar
实用程序的手册页中,我看到以下行。
If you wish, you may begin the first command-line argument with a dash.
但是,手册页中的其他任何地方都没有进一步提及破折号。由于我已经看到 ar
带有和不带有破折号的命令,所以这留下了未解决的问题。
在第一个命令行参数前加上 -
有什么影响(如果有的话)?
此外,如果我想保持跨系统的可移植性,使用 -
还是不使用 -
哪个更安全?
就 GNU binutils
中的 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] = '[=10=]';
/* 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) 就像强迫症一样,但以正确的方式订购:-)