天天看点

各种语言执行入口的传参方法

在操作系统中,执行程序时可以由系统传入参数,就是在执行的时候,附带上参数。比如:

<code>1</code>

<code>ping</code> <code>www.kryptosx.info</code>

后面跟着的网址就是ping的参数。

linux和windows的shell都遵循这个参数传入方式。这里列一下各种语言的执行入口传参方法。主要分为两类,一种是有main函数的语言,一种是没有main函数的。

在执行命令的时候,linux系统会先对命令行进行分解。通常是以空格分解,如果有双引号,双引号内的也是认为是一个参数,无论里面有无空格。

c类语言包括c和c++语言,他们的传参方式一样。都是在main函数中。c/c++语言中的main函数可以携带参数,只是我们平常不用。

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>** argv)</code>

<code>2</code>

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code><code>* argv[])</code>

argc  是指命令行输入参数的个数(以空白符分隔),程序名也是包含在内的。

argv  是一个指向字符串数组的指针。

<code>01</code>

<code>#include &lt;stdio.h&gt;</code>

<code>02</code>

<code>int</code> <code>main(</code><code>int</code> <code>argc, </code><code>char</code> <code>** argv)</code>

<code>03</code>

<code>{</code>

<code>04</code>

<code>    </code><code>printf</code><code>(</code><code>"argc: %d\n"</code><code>,argc);</code>

<code>05</code>

<code>    </code><code>int</code> <code>i;</code>

<code>06</code>

<code>    </code><code>for</code> <code>(i=0; i &lt; argc; i++)</code>

<code>07</code>

<code>        </code><code>printf</code><code>(</code><code>"argv[%d] is %s\n"</code><code>, i, argv[i]);</code>

<code>08</code>

<code>    </code><code>getchar</code><code>();</code>

<code>09</code>

<code>    </code><code>return</code> <code>0;</code>

<code>10</code>

<code>}</code>

<code>play.exe a b c d </code><code>"hello sir"</code>

<code>argc: 6</code>

<code>3</code>

<code>argv[0] is play.exe</code>

<code>4</code>

<code>argv[1] is a</code>

<code>5</code>

<code>argv[2] is b</code>

<code>6</code>

<code>argv[3] is c</code>

<code>7</code>

<code>argv[4] is d</code>

<code>8</code>

<code>argv[5] is hello sir</code>

可以看出,传给argv的字符串中,argc是整个输入的命令被分解的段数(注意双引号)。

shell脚本是没有main函数的,它是个解释性语言。但是我们也可以在运行时对其传参。相对c语言而言,更为简单。

shell是使用系统定义的位置变量。引用脚本参数时,可以使用$1到$9这9个变量。还有一个特殊点的变量是$*,它输出所有参数(不包括程序名)。

<code>#!/bin/bash</code>

<code>echo</code> <code>"\$* is "</code><code>$*</code>

<code>echo</code> <code>"\$0 is "</code><code>$0</code>

<code>echo</code> <code>"\$1 is "</code><code>$1</code>

<code>echo</code> <code>"\$2 is "</code><code>$2</code>

<code>echo</code> <code>"\$3 is "</code><code>$3</code>

<code>echo</code> <code>"\$4 is "</code><code>$4</code>

<code>bash</code> <code>hello.sh 1 2 3 4</code>

<code>$* is 1 2 3 4</code>

<code>$0 is hello.sh</code>

<code>$1 is 1</code>

<code>$2 is 2</code>

<code>$3 is 3</code>

<code>$4 is 4</code>

python是一个介于shell和c/c++之间的语言,它的执行入口传参有二者的特点。和shell一样python也是没有main函数的,但是python和c/c++类似有一个argv变量。python要传参还需要一个sys模块。

需要模块:sys

参数个数:len(sys.argv)

脚本名: sys.argv[0]

参数1: sys.argv[1]

参数2: sys.argv[2]

………..

<code>#coding=utf-8</code>

<code>import</code> <code>sys</code>

<code>print</code> <code>"sys.argv[0] is "</code><code>, sys.argv[</code><code>0</code><code>]</code>

<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>, </code><code>len</code><code>(sys.argv)):</code>

<code>    </code><code>print</code> <code>"sys.argv["</code><code>+</code><code>str</code><code>(i)</code><code>+</code><code>"] is "</code><code>, sys.argv[i]</code>

<code>python hello.py 2324 3 2 3 </code><code>"sads sdaf"</code>

<code>sys.argv[0] is  hello.py</code>

<code>sys.argv[1] is  2324</code>

<code>sys.argv[2] is  3</code>

<code>sys.argv[3] is  2</code>

<code>sys.argv[4] is  3</code>

<code>sys.argv[5] is  sads sdaf</code>