本文共 1861 字,大约阅读时间需要 6 分钟。
在操作系统中,执行程序时可以由系统传入参数,就是在执行的时候,附带上参数。比如:
1 | ping www.kryptosx.info |
后面跟着的网址就是ping的参数。
Linux和windows的shell都遵循这个参数传入方式。这里列一下各种语言的执行入口传参方法。主要分为两类,一种是有main函数的语言,一种是没有main函数的。
在执行命令的时候,linux系统会先对命令行进行分解。通常是以空格分解,如果有双引号,双引号内的也是认为是一个参数,无论里面有无空格。
C类语言包括C和C++语言,他们的传参方式一样。都是在main函数中。C/C++语言中的main函数可以携带参数,只是我们平常不用。
1 | int main( int argc, char ** argv) |
2 | int main( int argc, char * argv[]) |
argc 是指命令行输入参数的个数(以空白符分隔),程序名也是包含在内的。
argv 是一个指向字符串数组的指针。
01 | #include <stdio.h> |
02 | int main( int argc, char ** argv) |
03 | { |
04 | printf ( "argc: %d\n" ,argc); |
05 | int i; |
06 | for (i=0; i < argc; i++) |
07 | printf ( "argv[%d] is %s\n" , i, argv[i]); |
08 | getchar (); |
09 | return 0; |
10 | } |
1 | play.exe a b c d "hello sir" |
2 | argc: 6 |
3 | argv[0] is play.exe |
4 | argv[1] is a |
5 | argv[2] is b |
6 | argv[3] is c |
7 | argv[4] is d |
8 | argv[5] is hello sir |
可以看出,传给argv的字符串中,argc是整个输入的命令被分解的段数(注意双引号)。
shell脚本是没有main函数的,它是个解释性语言。但是我们也可以在运行时对其传参。相对C语言而言,更为简单。
shell是使用系统定义的位置变量。引用脚本参数时,可以使用$1到$9这9个变量。还有一个特殊点的变量是$*,它输出所有参数(不包括程序名)。
1 | #!/bin/bash |
2 | echo "\$* is " $* |
3 | echo "\$0 is " $0 |
4 | echo "\$1 is " $1 |
5 | echo "\$2 is " $2 |
6 | echo "\$3 is " $3 |
7 | echo "\$4 is " $4 |
1 | bash hello.sh 1 2 3 4 |
2 | $* is 1 2 3 4 |
3 | $0 is hello.sh |
4 | $1 is 1 |
5 | $2 is 2 |
6 | $3 is 3 |
7 | $4 is 4 |
Python是一个介于shell和C/C++之间的语言,它的执行入口传参有二者的特点。和shell一样python也是没有main函数的,但是python和c/c++类似有一个argv变量。python要传参还需要一个sys模块。
1 | #coding=utf-8 |
2 | import sys |
3 | print "sys.argv[0] is " , sys.argv[ 0 ] |
4 | for i in range ( 1 , len (sys.argv)): |
5 | print "sys.argv[" + str (i) + "] is " , sys.argv[i] |
1 | python hello.py 2324 3 2 3 "sads sdaf" |
2 | sys.argv[0] is hello.py |
3 | sys.argv[1] is 2324 |
4 | sys.argv[2] is 3 |
5 | sys.argv[3] is 2 |
6 | sys.argv[4] is 3 |
7 | sys.argv[5] is sads sdaf |
转载请注明: »