我在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]}
也不起作用。
我迷失了,因为我不知道是什么解释了这一点,我希望它只返回一个元素,就像大片段一样,但它不会因未知原因输出。
干杯
答案 0 :(得分:1)
要添加到数组,请使用var+=(value)
之类的var[$i]=value
。使用some_command <<< "$variable"
会导致稀疏数组,其中某些索引未定义。
此外:
echo
之类a && b || c
来避免c
。执行a
时,如果 <{strong> b
或if a
then
b
else
c
fi
失败,则会运行=
。为避免这种情况,请使用标准
[
help test
与{{1}}一起使用(请参阅{{1}})。