一尘不染

argv:清除通配符

linux

我正在研究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二进制执行和参数处理)引起的?


阅读 260

收藏
2020-06-03

共1个答案

一尘不染

在执行程序之前,外壳程序正在扩展glob。您引用glob并不是因为GCC,而是因为shell。如果您不希望出现这种情况,请使用不支持glob的shell。

2020-06-03