如何在 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
我在下面的代码中使用命令行参数。
问题是,如果我 运行 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