一个很有趣的命令行的事

Soulic 2009-01-02 03:02:46
刚刚发现命令行运行一个程序时有趣的现象,现在和大家分享一下.
先请大家看一段非常简单的程序:

#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
...全文
178 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
love_aiqiu_123 2009-01-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenzongquan1973 的回复:]
对一些特殊字符,可以在前面加\来表示。
[/Quote]./

/
/
/
./

Cpp权哥 2009-01-03
  • 打赏
  • 举报
回复
对一些特殊字符,可以在前面加\来表示。
aaajj 2009-01-03
  • 打赏
  • 举报
回复
学习
cceczjxy 2009-01-03
  • 打赏
  • 举报
回复
楼主糊涂了,
./Parameter *
There are 5 parameters in cmd:
./Parameter Parameter Parameter.c PrintP PrintP.c
这个就更奇怪了,本来想传入字母'*',但传入的确多了很多参数,原来把*作为参数传入是将本路很下所有的文件名作为参数传入,但是参数的顺序我现在还没有发现规律,至少不是按时间先后,也不是按文件名的字母排序(两个验证后都不是).

*字符在Bash下会扩展的,在这里就是扩展成当前目录下的所有文件,这明显是按文件名字母排序的呀。

在bash下,* " ' ` 等很多都是特殊字符,使用的时候要用符号\转义的。

./Parameter \*
./Parameter \'\'

..........
fox000002 2009-01-02
  • 打赏
  • 举报
回复
lz 学学 BASH 的语法就知道问题所在了
课程基础概述本门课程,大喵将会打着大家从零打造一款属于大家自己的 CLI命令行脚手架工具,本课程主要面向新手同学,对命令行工具开发,前端工具开发感兴趣的同学,可以通过本门课程学习到如何使用Node.JS开发一款适配自身项目特色的脚手架命令行工具。并且也会带着大家推送自己开发完成的CLI工具到NPM线上仓库,供所有人下载安装使用。整个课程,大喵会详细讲解所需要依赖的第三方模块包的具体使用,让同学们可以举一反三开发具备自身特色的CLI工具,最终大喵会运用到前面所讲解的基础内容,独立自主开发一个具备 damiao [ add | delete | list | init ] 四种子命令的CLI脚手架工具。CLI命令行工具命令行工具(Cmmand Line Interface)简称cli,顾名思义就是在命令行终端中使用的工具。我们常用的 git 、npm、vim 等都是 cli 工具,比如我们可以通过 git clone 等命令简单把远程代码复制到本地。在目前前端工程大流行的环境下,vue-cli、create-reate-app、angular-cli 等等方便快捷的命令行脚手架工具诞生,极大的提升了我们的开发效率与质量,我们可以通过这些脚手架工具在本地快速构建我们的开发项目。 课程目录结构1、CLI课程介绍   2、CLI课程纲领和讲师介绍3、CLI课程内容概述    4、CLI命令行工具及场景应用5、CLI课程准备工具和技术   6、CLI课程收获和收益  7、CLI课程实战案例介绍   8、npm CLI 命令行工具发展现状9、创建第一个命令行自定义命令   10、process.argv 接收命令行参数11、commander 工具使用介绍一   12、commander 工具使用介绍二13、inquirer 工具使用介绍   14、ora 加载工具使用介绍15、chalk 颜色工具使用介绍   16、download-git-repo 仓库工具介绍17、创建脚手架命令   18、创建命令可执行文件19、damiao add 命令行指令开发   20、damiao add 模板录入校验21、damiao delete 命令行指令开发   22、damiao list 命令行指令开发23、damiao init 初始化项目指令开发   24、damiao init 指令参数输入校验25、damiao 命令行指令测试.mp4  26、创建npm个人账号及发布npm仓库27、全局安装脚手架工具

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧