整个数组是回显的,但不是它的元素 - Shell Script

时间:2014-08-27 18:40:55

标签: linux bash shell

我在Shell Script 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 $ {S [$ RS_INDEX]}中只有一个空格。但是,如果我写

echo ${S[@]}

它按照echo的要求输出整个数组。如果我写

echo ${S[3]}

也不起作用。

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

干杯

1 个答案:

答案 0 :(得分:1)

要添加到数组,请使用var+=(value)之类的var[$i]=value。使用some_command <<< "$variable"会导致稀疏数组,其中某些索引未定义。

此外:

  • @chepner suggested <!/ LI>
  • 在Bash中,您可以使用echo之类a && b || c来避免c
  • 执行a时,如果 <{strong> bif a then b else c fi 失败,则会运行=。为避免这种情况,请使用标准

    [
  • help test与{{1}}一起使用(请参阅{{1}})。