argv是几元数组 linux
2014-02-12 11:08:04 Yqq__00 阅读数 1281
int main( int argc, char *argv[] ) { ... }
argc 包含命令行选项的个数argv 包含aygc 个C 风格字符串代表了由空格分隔的命令
选项例如对于如下命令行
prog -d -o ofile data0
argc 被设置为5 且argv 被设置为下列C 风格字符串
argv[ 0 ] = "prog";
argv[ 1 ] = "-d";
argv[ 2 ] = "-o";
argv[ 3 ] = "ofile";
argv[ 4 ] = "data0";
argv[0]总是被设置为当前正被调用的命令从索引1 到argc-1 表示被传递给命令的实际

选项




把程序修改成这样试试:

int main(int argc,char **argv) 

    printf( "命令参数个数:%d\n", argc ) ;
    for( int i=0; i<argc; i++ )
        printf("第%d个参数:%s\n",i+1, argv[i] ); 
    return ;
}



http://bbs.csdn.net/topics/80252017

2013-11-18 16:16:23 renguorui1 阅读数 1022

int main(argc, argv[])是linux与unix下的标准用法。

int main()只是linux与unix的默许用法。

下面通过一个例子edit.c来具体介绍argc和argv[]参数。

//edit.c

linux中argc、argv参数介绍

 

编译程序:gcc -g edit.c -o edit

运行程序:./edit

显示结果:./edit

运行程序:./edit file

显示结果:./edit, file

运行程序:./edit f b

显示结果:./edit, f, b

运行程序:./edit a b c

显示结果:./edit

 

linux中argc、argv参数介绍

 

从程序的运行结果我们不难看出,argc表示运行程序输入参数个数(运行程序:./edit f b,argc == 3)。而argv[0]代表第一个参数项,argv[1]代表第二个参数项...

 

 

2015-04-23 15:44:55 reliveIT 阅读数 677

转载:点击打开链接

数组的声明:

  1. 1)array[key]=value # array[0]=one,array[1]=two
复制代码
  1. 2)declare -a array # array被当作数组名
复制代码
  1. 3)array=( value1 value2 value3 ... )
复制代码
  1. 4)array=( [1]=one [2]=two [3]=three ... )
复制代码
  1. 5)array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身
复制代码
数组的访问:
  1. 1)${array[key]} # ${array[1]}
复制代码
数组的删除
  1. 1)unset array[1] # 删除数组中第一个元素
复制代码
  1. 2)unset array # 删除整个数组
复制代码
计算数组的长度:
  1. 1)${#array}
复制代码
  1. 2)${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别
复制代码
数组的提取
从尾部开始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three

子串删除
  1. [root@localhost dev]# echo ${array[@]:0}
  2. one two three four
复制代码
  1. [root@localhost dev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre"
  2. one two e four
复制代码
  1. [root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"
复制代码
  1. [root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
复制代码
  1. [root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
  2. one tw three four
复制代码
  1. [root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
  2. one tw three four
复制代码
子串替换
  1. [root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
复制代码
第一个匹配到的,会被删除
  1. [root@localhost dev]# echo ${array[@] /o/m}
  2. mne twm three fmur
复制代码
所有匹配到的,都会被删除
  1. [root@localhost dev]# echo ${array[@] //o/m}
  2. mne twm three fmur
复制代码
没有指定替换子串,则删除匹配到的子符
  1. [root@localhost dev]# echo ${array[@] //o/}
  2. ne tw three fur
复制代码
替换字符串前端子串
  1. [root@localhost dev]# echo ${array[@] /#o/k}
  2. kne two three four
复制代码
替换字符串后端子串
  1. [root@localhost dev]# echo ${array[@] /%o/k}
  2. one twk three four
复制代码
2017-05-18 16:53:24 Tanya_girl 阅读数 192

原文:点击打开链接

引言

  在Linux平台上工作,我们经常需要使用shell来编写一些有用、有意义的脚本程序。有时,会经常使用shell数组。那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解,shell中的数组。

数组的定义

  何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。

  数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开。

  举个列子: 

  arr_number=(1 2 3 4 5);

  字符串类型数组:同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。

  arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');

数组的操作

  我们使用数值类型数组arr_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。提一个知识点,我们在shell里面想获取某个变量的值,使用$符开头,如:$a或者${a}即可。

  获取数组长度

  arr_length=${#arr_number[*]}或${#arr_number[@]}均可,即形式:${#数组名[@/*]} 可得到数组的长度。

  读取某个下标的值

对某个下标赋值

  这里需要提出两个问题:

    第一个问题是如果该下标元素已经存在,会怎么样?

    答:会修改该下标的值为新的指定值。

    例如:arr_number[2]=100,数组被修改为(1 2 100 4 5)

    第二个问题是如果指定的下标已经超过当前数组的大小,如上述的arr_number的大小为5,指定下标为10或者11或者大于5的任意值会如何?

    答:新赋的值被追加到数组的尾部。

    例如:arr_number[13]=13,数组被修改为(1 2 100 4 5 13)

  删除操作

    清除某个元素:unset arr_number[1],这里清除下标为1的数组;

    清空整个数组:unset arr_number;

  分片访问

    分片访问形式为:${数组名[@或*]:开始下标:结束下标},注意,不包括结束下标元素的值。

    例如:${arr_number[@]:1:4},这里分片访问开始下标为1到结束下标为4的值结果输出为新数组,但不包括下标为4的值。

  模式替换

    形式为:${数组名[@或*]/模式/新值}

    例如:${arr_number[@]/2/98}

  数组的遍历

数组遍历我们使用for语句来演示:

    for v in ${arr_number[@]}; do

      echo $v;

    done

结束语

  通过上述,我们讲解了shell中数组的定义,已经对数组的相关操作有获取长度,读取某下标值,对某个下标赋值,删除、分配和替换以及遍历。通过上述的讲解,希望能够给与读者在Linux平台中使用shell一些帮助,感谢读者耐心的阅读。



2018-12-24 20:42:09 yueludanfeng 阅读数 46

关联数组

  • 定义数组
declare -A data   #注意,必须declare -A声明该关联数组变量,否则可能会导致数组不可用
data=(
        [101]=D101 
        [102]=D102_103
        [103]=D102_103
)

declare -A data
data=(
        [file0]=D101
        [file1]=D102_103
        [file2]=D102_103
)

for ((i=0;i<=2;i++))
do
echo ${data[file$i]}
done

  • 遍历数组
for i in "${!data[@]}"
do
    echo ${data[$i]}
done

for i in "${!array[@]}"
do
    echo ${array[$i]}
done

结果:

root@centos7-132:[/root]sh test.sh
168
158
D101
D102_103
D102_103
root@centos7-132:[/root]

索引数组

  • 定义数组
array=( 1 'hello' 5)
  • 遍历索引数组
for i in ${!array[*]}
do
	echo ${array[$i]}
done
  • 分片访问
${data[@]:1:4}  # 输出下标为1及随后的3个元素值 (${data_array[@]:start:length})
  • 其他
echo ${!array[*]}     #取关联数组所有键
echo ${!array[@]}   #取关联数组所有键
echo ${array[*]}      #取关联数组所有值
echo ${array[@]}    #取关联数组所有值
echo ${#array[*]}    #取关联数组长度
echo ${#array[@]}  #取关联数组长度
  • 其他
    在linux bash中,有个特殊的变量,叫IFS(Internal Field Separator),当shell需要对字符串进行分割时,则使用IFS值作为分割符。该字段的默认值为空格,回车和tab符。shell中将字符串放在括号内,则会将字符串分割成数组

参考:
https://blog.csdn.net/mm_bit/article/details/48417157
http://www.cnblogs.com/python2687806834/p/9851412.html
https://blog.csdn.net/qq_22075977/article/details/75209149

Linux数组

阅读数 29

创建并输出数组:[student@myhost~]$a=(123)[student@myhost~]$echo${a[0]}1[student@myhost~]$echo$a#直接打印数组名为第一个元素值1[student@myhost~]$echo${a[*]}123[student@myhost~]$echo${a...

博文 来自: tus00000

Linux 数组

阅读数 337

C++数组C++支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个单独的变量,比如number0、number1、...、number99,而是声明一个数组变量,比如numbers,然后使用numbers[0]、numbers[1]、...、numbers[99]来代表一个个单独的...

博文 来自: Cuihuahuaa

linux c编程 main函数的参数(argc、argv)问题

阅读数 25

main函数定义:intmain(charargc,char*argv[])官方解释:argc保存的是命令行参数的数目argv是指向个参数的各指针所构成的数组。即:argc:它是一个整型数据,指的是往主函数传入参数的个数。argv[]:它是一个指针数组,即每个数组元素都为一个指针,即每个数组元素都是一个地址变量,每个元素存储的是字符串的首地址(字符串本身就是它的首...

博文 来自: qq_41204464

Linux C中main函数中的参数argc和argv

阅读数 1449

                                         LinuxC中main函数中的参数argc和argv1、源码                   2、运行结果                 ...

博文 来自: yanlaifan

[linux]int main(int argc,char* argv[])详解

阅读数 309

argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数命令行后面跟的用户输入的参数。char  *argv[]是一个字符数组,其大小是int  argc,主要用于命令行参数  argv[]  参数,数组里每个元素代表一个参数。比如你输入:test   a.c   b.c   t.c则:             argc   =   4

博文 来自: luther24
没有更多推荐了,返回首页