我正在研究K&R C书中的一个示例,该示例要求您实质上构建一个RPN计算器,该计算器通过命令行参数来接受输入。我的解决方案实质上是遍历给定的参数并给出答案,但我注意到了一些问题:
如果我要给乘法字符(星号)'*'不加单引号,则gcc假定它是通配符输入,因此我的输入为
'*'
$./rpn 5 10 *
给我输出
read 5 read 10 read rpn read rpn.c = 0
用单引号括住星号可解决此问题
$./rpn 5 10 '*' read 5 read 10 read * = 50
我的问题是是否有一种方法可以清理输入内容,以便我的程序不需要将星号用单引号引起来,还是此行为是由更基本的东西(例如Linux / POSIX / UNIX二进制执行和参数处理)引起的?
在执行程序之前,外壳程序正在扩展glob。您引用glob并不是因为GCC,而是因为shell。如果您不希望出现这种情况,请使用不支持glob的shell。