#!/bin/bash
i=0
while read line
do
hosts[i++]=$line
done < /etc/hosts
# 或者使用C风格的自增,但需要确保Bash版本支持此特性并且启用了扩展语法
# while read line; do hosts[i++]=line; done < /etc/hosts
echo "数值"
echo "${hosts[@]}"
echo "索引与值"
for index in "${!hosts[@]}"; do
echo "$index : ${hosts[index]}"
done
脚本内容详解:
-
初始化索引变量:
Bash1i=0
初始化数组索引变量
i
为0,以便在接下来的循环中正确地给数组赋值。 -
读取并处理文件内容:
Bash1while read line 2do 3 hosts[i++]=$line 4done < /etc/hosts
使用
while
循环和read
命令逐行读取/etc/hosts
文件的内容。每一行内容被读取后,通过hosts[i++]=$line
的形式添加到hosts
数组中,这里尝试模拟C风格的自增,但在Bash中直接这样使用可能会有问题,正确的Bash语法应避免这种自增形式。修正建议: 应使用Bash支持的自增方式,例如,在循环外部初始化
Bashi
,在循环体内通过((i++))
或((i=i+1))
来递增索引,然后赋值,如:while read line; do hosts[i]=$line ((i++)) done < /etc/hosts
-
输出数组内容:
-
数值输出:
Bashecho "数值" echo "${hosts[@]}"
输出数组
hosts
的所有元素,[@]
保证了数组元素正确无遗漏地输出,即使元素中含有空格。 -
索引与值:
Bashecho "索引与值" for index in "${!hosts[@]}"; do echo "$index : ${hosts[index]}" done
遍历数组
hosts
的所有索引(使用${!hosts[@]}
),并打印出每个索引及其对应的值。
-
综上,该脚本演示了如何在Bash中读取文件内容到数组、遍历数组索引和值的基础操作,但需注意根据Bash的具体语法要求调整自增表达式以确保脚本的正确执行。