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

时间:2019-09-02 18:39:21

标签: c command-line command-line-arguments

我在下面的代码中接受命令行参数。

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

我尝试在*之前加上\,例如:\*

我还尝试过用引号将其传递,例如:'*'

但是,这些方法都不会使我的代码进行乘法。

代码如下:

#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;
}

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

1 个答案:

答案 0 :(得分:3)

使用''(单引号)或""(双引号)或用前面的\进行转义都可以。您可以像这样测试它:

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

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

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

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