Linux 整个数组被回送,但不是it-Shell脚本的元素

Linux 整个数组被回送,但不是it-Shell脚本的元素,linux,bash,shell,Linux,Bash,Shell,我在Shell脚本BASH中有这个结构 i=0 while read linha_reg do REG_ADDRESS=$(echo $linha_reg | cut -f1 -d ' ') [ $REG_ADDRESS -lt 16] && T[$i]=$REG_ADDRESS || S[$i]=$REG_ADDRESS i=$((i+1)) done < register.txt while read linha_inst do RS=

我在Shell脚本BASH中有这个结构

i=0
while read linha_reg
do
    REG_ADDRESS=$(echo $linha_reg | cut -f1 -d ' ')
    [ $REG_ADDRESS -lt 16] && T[$i]=$REG_ADDRESS || S[$i]=$REG_ADDRESS
    i=$((i+1))
done < register.txt

while read linha_inst
do
    RS=$(echo $linha_inst | cut -f4 -d ' ')
    RS=$(echo $RS | cut -f1 -d ',')

    RS_INDEX=${RS:2:2}
    RS_LETTER=${RS:1:1}

    [ "$RS_LETTER" == "s" ] && echo ${S[$RS_INDEX]} 
done < instruction.txt
它根据echo的请求输出整个阵列。如果我写

echo ${S[3]}
也不起作用

我迷路了,因为我不知道是什么解释了这一点,我希望它只返回一个元素,就像大片段一样,但由于未知的原因它不会输出


Cheers

要添加到数组中,请使用
var+=(value)
like。使用
var[$i]=value
会产生稀疏数组,其中一些索引未定义

此外:

  • !
  • 在Bash中,您还可以使用类似于
    some_命令的命令,无论是分配给
    T
    还是
    S
    ,都可以递增
    $i
    ;这将在未分配给的数组中留下间隙。请使用
    echo${#S[@]}
    检查
    S
    中有多少个元素,以验证是否有多个元素。那你就知道会有多少了。您可能还想发布register.txt和instruction.txt的示例行。使用
    echo | cut…
    做子字符串提取应该做的事情是一种不可靠的方法。哦,你的索引不是0-7!对于
    T[x]
    S[y]
    需要两个不同的计数器,以保持索引的直线性。对于
    S
    使用
    i
    ,对于
    T
    使用
    j
    ,以保持索引的直线性,例如
    i=0;j=0。。[$REG_ADDRESS-lt 16]&&{T[$i]=$REG_ADDRESS;((i++);}{S[$j]=$REG_ADDRESS;((j++);}
    --或--
    声明-a T;声明-a S
    ,然后使用
    T+=$REG\u ADDRESS
    S+=$REG\u ADDRESS
    @DavidC.Rankin
    T+=($REG\u ADDRESS)
    ,否则只需在
    ${T[0]}
    上执行字符串串联即可。
    echo ${S[3]}
    
    if a
    then
        b
    else
        c
    fi