tec*_*ury 3 c shell argc osx-mavericks
我想在运行时输入一些命令行参数.喜欢
./program abc def ghi
Run Code Online (Sandbox Code Playgroud)
argc
在这种情况下将是4.没问题.但如果我这样做
./program abc def *
Run Code Online (Sandbox Code Playgroud)
甚至
./program * abc def
Run Code Online (Sandbox Code Playgroud)
变量argc
给我一个远大于4的值.
在打印整个argv
数组(不考虑第0个参数; ./program
)作为字符串时,我会得到一个列表,其中前两个元素是abc
,def
而其他元素都是工作目录中包含的文件的文件名.
我正在尝试从K&R学习C语言.我试图制作一个RPN计算器,我们可以给出类似的表达式./program 2 4 *
.
这是什么原因?或者我错了?
Shell有一个名为globbing的功能,它可以扩展某些模式,例如*
匹配文件.如果在当前目录中,您具有以下内容:
file1 file2 somethingelse dir1
Run Code Online (Sandbox Code Playgroud)
然后打电话:
any_program *
Run Code Online (Sandbox Code Playgroud)
将相当于:
any_program file1 file2 somethingelse dir1
Run Code Online (Sandbox Code Playgroud)
或者,如果你这样做:
any_program fi*
Run Code Online (Sandbox Code Playgroud)
它将相当于:
any_program file1 file2
Run Code Online (Sandbox Code Playgroud)
这是shell的一个特性.你的C程序表现良好.
由于贝壳是不同的,让我们假设您正在使用bash
.要防止bash
执行扩展,您应该引用参数.例如:
any_program "fi*"
Run Code Online (Sandbox Code Playgroud)
实际上会传递fi*
给你的程序,而不会扩展到file1 file2
.