shell 在Linux中通过终端传递 * 作为参数时使用'*'作为char

2wnc66cl  于 2023-04-07  发布在  Shell
关注(0)|答案(1)|浏览(126)

我正在做一个基本的计算器来熟悉传递参数。我编写的函数是:

int op(char* sig, int num1, int num2)
{
    char sign=*sig;
    if(sign == '+') return num1+num2;
    if(sign == '/') return num1/num2;
    if(sign == '-') return num1-num2;
    if(sign == '*') return num1*num2;
    return 0;
}

我的主函数获取数字和符号,并调用“op”函数。

int main(int argc, char *argv[])
{
    int num1=atoi(argv[1]);
    int num2=atoi(argv[3]);
    char* sig=argv[2];
    int res=op(sig,num1,num2);
    printf("%d\n",res);
}

问题是,当我通过终端使用“./”命令调用程序时,它不会将*符号作为char。相反,当我在参数中使用*时,该参数变为pipewriter.c,这是我编写此代码的文件的名称。例如,./pw.exe 3 + 4打印7,而./pw.exe 3 * 4只打印0。
如何将*符号仅用作'*'字符?

sqougxex

sqougxex1#

*是shell的一个特殊字符(用于文件名的globbing),所以如果你想将一个字符作为参数传递给你的程序,你需要将它引用或转义:

  • '*'
  • "*"
  • \*

这三个变量之间的区别(以及为什么你可能想使用一个而不是另一个)在于它们如何与变量展开进行交互。对于你的目的(不涉及shell变量),它们中的任何一个都可以。

相关问题