刚刚发现命令行运行一个程序时有趣的现象,现在和大家分享一下.
先请大家看一段非常简单的程序:
#include <stdio.h>
int main(
int argc,
char **argv){
int i = 0;
if ( argc < 2 ){
printf( "There is only one parameter in cmd: %s.\n", argv[0] );
}
else{
printf( " There are %d parameters in cmd:\n", argc );
for(; i< argc ; i++){
printf("%20s", argv);
}
printf("\n");
}
return 0;
}
编译程序,并运行(我是在服务器X4100.unix-center.net),得到如下有意思的现象:
-bash-3.00$ ./Parameter
There is only one parameter in cmd: ./Parameter.(这个很好理解)
-bash-3.00$ ./Parameter #
There is only one parameter in cmd: ./Parameter.(执行这个的时候,并不像我想象的一样把字母'#'传入做为一个参数)
-bash-3.00$ ./Parameter *
There are 5 parameters in cmd:
./Parameter Parameter Parameter.c PrintP PrintP.c
这个就更奇怪了,本来想传入字母'*',但传入的确多了很多参数,原来把*作为参数传入是将本路很下所有的文件名作为参数传入,但是参数的顺序我现在还没有发现规律,至少不是按时间先后,也不是按文件名的字母排序(两个验证后都不是).
然后我就想传入参数#或*,经过试验发现用" "或' '括起来就可以,如下:
[code=BatchFile]
-bash-3.00$ ./Parameter '#'
There are 2 parameters in cmd:
./Parameter #
-bash-3.00$ ./Parameter '*'
There are 2 parameters in cmd:
./Parameter *
-bash-3.00$ ./Parameter "#"
There are 2 parameters in cmd:
./Parameter #
-bash-3.00$ ./Parameter "*"
There are 2 parameters in cmd:
./Parameter *
[/code]
随后一想,如果我想传入的参数即为"呢?那怎么办,同样用" "或' ' 括起来,如下:
-bash-3.00$ ./Parameter "'"
There are 2 parameters in cmd:
./Parameter ' (这个是对的)
-bash-3.00$ .Parameter """
>
>
-bash-3.00$ (这个就不对了,我是用ctrl+c结束运行的.)
如果想传入参数',那结果很类似,如下:
-bash-3.00$ ./Parameter '"'
There are 2 parameters in cmd:
./Parameter "
-bash-3.00$ ./Parameter '''
>
>
-bash-3.00$
我接着试了以下几种情况,就是想传入参数""和'':
-bash-3.00$ ./Parameter """" (传参数"",得到空)
There are 2 parameters in cmd:
./Parameter
-bash-3.00$ ./Parameter '""'(传参数"",得到"")
There are 2 parameters in cmd:
./Parameter ""
-bash-3.00$ ./Parameter "''"(传参数''(‘’),得到'')
There are 2 parameters in cmd:
./Parameter ''
-bash-3.00$ ./Parameter ''''(传参数''(‘’),得到空)
There are 2 parameters in cmd:
./Parameter