linux命令建立二维数组,shell 二维数组

本文介绍如何在不支持数组的Bourne Shell中通过特殊方法模拟二维数组,并提供具体的实现代码及测试示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/sh

a1="11 12 13"

a2="21 22 23"

a3="31 32 33"

for index in a1 a2 a3

do

eval d1=\$$index

for d2 in $d1

do

echo $d2

done

done

#----- eof -----#

Bourne Shell中模拟二维数组 (2007-10-12 20:47:02)

标签: 杂谈

Bourne Shell是不支持数组的,一般的处理方法如下:

---------------

A="1 2 3 4"

set $A

echo $N

---------------

那么,二维数组数组怎么办?想来想去也没有什么好方法。

只好用如下的形式模拟一下:

---------------

A1="11 12 13"

A2="21 22 23"

A3="31 32 33"

A4="41 42 43"

---------------

对于A(x, y),先找到Ax,然后在其中找到第y个元素。

这里分为读取(get)和设置(set)两种处理:

N=A(x, y)  ==> getValue(A, x, y)

A(x, y)=N  ==> setValue(A, x, y, N)

1 #!/bin/sh

2

3 # replace(idx, val)

4 replace()

5 {

6 idx=$1; val=$2

7

8 awk " {

9 for(i = 1; i <= NF; i++)

10 printf(\"%d\", i != $idx ? \$i : $val);

11 } "

12

13 }

14

15 # setValue(A, i, j, val)

16 setValue()

17 {

18 A=$1; i=$2; j=$3; val=$4

19

20 eval p=\$$A$i

21 eval $A$i=\"`echo $p | replace $j $val`\"

22 }

23

24 # getValue(A, i, j)

25 getValue()

26 {

27 A=$1; i=$2; j=$3

28

29 eval echo \$$A$i | awk "{print \$$j}"

30 }

31

32 #===============#

33 # Test routines #

34 #===============#

35 SDV1="11 12 13"

36 SDV2="21 22 23"

37 SDV3="31 32 33"

38 SDV4="41 42 43"

39

40 printArray()

41 {

42 echo "[$SDV1]"

43 echo "[$SDV2]"

44 echo "[$SDV3]"

45 echo "[$SDV4]"

46 }

47

48 test_setValue()

49 {

50 for i in 1 2 3 4; do

51 for j in 1 2 3; do

52 setValue SDV $i $j 999

53 echo "SDV($i, $j) => 999"

54 done

55 done

56 printArray

57 }

58

59 test_getValue()

60 {

61 printArray

62 for i in 1 2 3 4; do

63 for j in 1 2 3; do

64 n=`getValue SDV $i $j`

65 echo "SDV($i, $j) = $n"

66 done

67 done

68 }

69

70 main()

71 {

72 echo BEFORE

73 test_getValue

74

75 echo SETTING

76 test_setValue

77

78 echo AFTER

79 test_getValue

80 }

81

82 main

b=1

a1=10

echo ${a$b}              #php 可以这样用,shell不可以噢!!

echo `eval 'echo $'a$b`

eval echo \${a$b}

#!/bin/sh

i=0

for((;i<12;i=$i+2))

{

echo "=$i/n"

re="ab$i"

echo "$re"

echo "//$re/n"

}

~

~

它相当于 c 语言中的宏定义,当在一个赋值语句的前面加上 eval 时,它就会将 后面表达式中以 $ 开头的所有变量进行整体替换

例如:

var1="1234 4556"

tmp=var

eval test="$"$var"1"

echo  $test

那么就会在屏幕上显示出 :

1234 4556

################################################

eval是将其后的字符串当成命令来执行如

eval "ls -l"

就是

命令ls -l

####################################################

语法:eval cmdLine

eval会对后面的 cmdLine 进行两遍扫描,如果第一遍扫描后 cmdLine 是个普通命令,则执行此命令;

如果 cmdLine 中含有变量的间接引用,则保证间接引用的语义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值