LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 633|回复: 1

Shell 编程中能否实现变量的下标

[复制链接]
发表于 2005-11-28 09:34:23 | 显示全部楼层 |阅读模式
想实现类似以下功能,如何实现呢?



x1=1.1.1.1
x2=2.2.2.2
x3=3.3.3.3

n=1
while((n<=3));do
    echo $x($n)
    ((n++))
done


但显然以上代码是不成功的,错在何处呢?
发表于 2005-11-28 20:02:18 | 显示全部楼层
#!/bin/sh
#Program: array
# Author: HM Li <HM_Li@ustc.edu>
#   Date: 05-11-28
#Comment: test array
x[1]=1.1.1.1
x[2]=2.2.2.2
x[3]=3.3.3.3
n=1
while(($n<=3)) ;do
    echo ${x[$n]}
    ((n++))
done


man bash:
   Arrays
       Bash  provides  one-dimensional array variables.  Any variable may be used as an
       array; the declare builtin will explicitly declare an array.  There is no  maxi-
       mum  limit  on the size of an array, nor any requirement that members be indexed
       or assigned contiguously.  Arrays are indexed using integers and are zero-based.

       An  array is created automatically if any variable is assigned to using the syn-
       tax name[subscript]=value.  The subscript is treated as an arithmetic expression
       that  must  evaluate  to  a number greater than or equal to zero.  To explicitly
       declare an array, use declare  -a  name  (see  SHELL  BUILTIN  COMMANDS  below).
       declare   -a  name[subscript]  is  also  accepted;  the  subscript  is  ignored.
       Attributes may be specified for an array variable using the declare and readonly
       builtins.  Each attribute applies to all members of an array.

       Arrays  are  assigned to using compound assignments of the form name=(value1 ...
       valuen), where each value is of the form  [subscript]=string.   Only  string  is
       required.   If  the  optional brackets and subscript are supplied, that index is
       assigned to; otherwise the index of the  element  assigned  is  the  last  index
       assigned to by the statement plus one.  Indexing starts at zero.  This syntax is
       also accepted by the declare builtin.  Individual array elements may be assigned
       to using the name[subscript]=value syntax introduced above.

       Any  element of an array may be referenced using ${name[subscript]}.  The braces
       are required to avoid conflicts with pathname expansion.  If subscript is  @  or
       *,  the  word expands to all members of name.  These subscripts differ only when
       the word appears within double quotes.  If the word is double-quoted, ${name
  • }
           expands  to  a  single word with the value of each array member separated by the
           first character of the IFS special variable, and ${name[@]} expands each element
           of name to a separate word.  When there are no array members, ${name[@]} expands
           to nothing.  This is analogous to the expansion of the special parameters *  and
           @  (see Special Parameters above).  ${#name[subscript]} expands to the length of
           ${name[subscript]}.  If subscript is * or @, the expansion is the number of ele-
           ments in the array.  Referencing an array variable without a subscript is equiv-
           alent to referencing element zero.

           The unset builtin is used to destroy arrays.  unset name[subscript] destroys the
           array  element at index subscript.  unset name, where name is an array, or unset
           name[subscript], where subscript is * or @, removes the entire array.

           The declare, local, and readonly builtins each accept a -a option to specify  an
           array.  The read builtin accepts a -a option to assign a list of words read from
           the standard input to an array.  The set and declare builtins display array val-
           ues in a way that allows them to be reused as assignments.
  • 回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表