如何在 Linux 中将星号作为命令行参数?

How do I give the asterisk as a command-line argument in Linux?

我在下面的代码中使用命令行参数。

问题是,如果我 运行 Linux 上的这段代码,* 是一个引用目录中所有文件的 glob(我知道,因为我打印了参数并打印出我的文件列表),这导致我的代码不执行乘法。所有其他操作都正常。

我试过在 * 之前加上一个 \ 像这样: \*

我也试过像这样用引号传递它:'*'

但是,none 这些方法导致我的代码执行乘法。

代码如下:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a, b, result;
    char opr;

    if(argc!=4)
    {
        printf("Invalid arguments...\n");
        return -1;
    }
    a = atoi(argv[1]);
    b = atoi(argv[3]);
    opr=argv[2][0];
    switch(opr)
    {
        case '+':
            result=a+b;
            break;
        case '-':
            result=a-b;
            break;
        case '*':
            result=a*b;
            break;
        default:
            result=0;
            break;
    }
    if(opr=='+' || opr=='-' || opr=='*')
        printf("Result: %d %c %d = %d\n",a,opr,b,result);
    else
        printf("Undefined Operator...\n");

    return 0;
}

如何将星号作为参数传递给我的应用程序?

''(单引号)或 ""(双引号)引用或用前面的 \ 转义都应该有效。你可以这样测试:

$ echo *
bar foo
$ echo '*'
*
$ echo "*"
*
$ echo \*
*

后两种情况shell不展开。双引号也足够了,但可能会导致一些其他字符出现问题。单引号更安全。

您还可以 运行 您的程序 strace 检查给定的参数向量:

$ strace echo "*"
execve("/bin/echo", ["echo", "*"], 0x7ffc26311518 /* 24 vars */) = 0