如何定义数组
例子 1:定义常量数组
ARR1=(A B C D)
echo ${#ARR1[@]}
ARR2=()
echo ${#ARR2[@]}
数组ARR1包含4个元素,数组ARR2包含0个元素。
例子 2:从字符串变量定义数组
STR="AA BB CC"
ARR=(${STR})
echo ${#ARR[@]}
ARR包含3个元素。
例子 3:从字符串变量定义数组,指定域分隔符
STR="AA-BB-CC"
ARR1=(${STR})
echo ${#ARR1[@]}
IFS=- ARR2=(${STR})
echo ${#ARR2[@]}
这个例子中,ARR1包含一个元素(AA-BB-CC),而ARR2包含3个元素(AA, BB, 和CC),因为定义ARR2前指定了分隔符(-)。
例子 4:从命令的执行结果按行定义数组
假设文本文件a.txt包含3行内容:
AAA
BBB
CCC
定义数组:
ARR=($(cat a.txt))
echo ${#ARR[@]}
数组包含3个元素。
猜,如果a.txt定义如下内容:
AAA BBB CCC
aaa bbb ccc
上述数组ARR包含几个元素? --- 答: (6个)
为什么?因为
STR=$(cat a.txt)
echo $STR
这个执行的结果是:AAA BBB CCC aaa bbb ccc,把多行拼成了一行。
那么要按行存入数组,怎么办呢?
我也没有想到更好的办法,只能按行读入,然后按行赋值带数组:
n=0
while read a; do
ARR[$n]=$a
((n++))
done < a.txt
echo ${#ARR[@]}