' - '运算符在Linux中实际上做了什么?

Pav*_*ath 4 unix linux bash shell

我看到-操作员使用不同的命令以不同的方式运行.

例如,

cd - 
Run Code Online (Sandbox Code Playgroud)

cds到上一个目录,而,

vim -
Run Code Online (Sandbox Code Playgroud)

读取 stdin

所以我想知道为什么-运营商在这里以两种不同的方式行事.有人能指出我对-运营商的一些详细文件吗?

Ben*_*oit 11

它不是运营商,而是一个论点.当你用C或C++编写一个程序argv[1]时(它是第一个参数),你可以随心所欲地做任何事情.

按照惯例,许多程序使用-stdin作为占位符,通常需要输入文件名,stdout需要输出文件名.但是cd不需要读取文件流,为什么需要stdin或stdout?

额外:下面是vim的摘录main.c,解析开头的参数-:如果没有其他字符,它会激活STDIN输入.

    else if (argv[0][0] == '-' && !had_minmin)
    {
        want_argument = FALSE;
        c = argv[0][argv_idx++];
#ifdef VMS
        ...
#endif
        switch (c)
        {
        case NUL:       /* "vim -"  read from stdin */
                /* "ex -" silent mode */
        if (exmode_active)
            silent_mode = TRUE;
        else
        {
            if (parmp->edit_type != EDIT_NONE)
            mainerr(ME_TOO_MANY_ARGS, (char_u *)argv[0]);
            parmp->edit_type = EDIT_STDIN;
            read_cmd_fd = 2;    /* read from stderr instead of stdin */
        }
Run Code Online (Sandbox Code Playgroud)