代码:
#!/bin/bash
# 定义数组
declare -a lines
# 逐行读取文件并将每行内容添加到数组中
while IFS= read -r line || [ -n "$line" ]; do
lines+=("$line")
done < "file.txt"
# 打印数组内容
for (( i=0; i<"${#lines[@]}"; i++ )); do
echo "Line $((i+1)): ${lines[i]}"
done
(代码由chat友情赞助)
解释:
问题一:
while IFS= read -r line || [ -n "$line" ]; do
这里分号(;)代表不换行不然就是删掉分号,把do写到下一行
问题二:
lines+=("$line")
这里括号()代表定义数组,也就是line作为一个数组元素被添加到数组lines中,如果去掉括号就会一直将line添加到lines的第一个元素中
问题三:
< "file.txt"
这重定向写在while循环最后面为什么,会被read利用?
把while循环看成一个命令行,
while read -r line
do
....
done
这段代码会直接从stdin(标准输入)中给read,每次判断read时都会从stdin中读取输入,但是最后加入< "file.txt"则会导致read从文件中一行一行读取!、
问题四:
"${#lines[@]}"
#代表获取变量的长度或数量,lines[@]代表整个数组
所以整个代码代表,lines数组中元素个数
问题五:
$((i+1))
会直接计算双层括号里面的算式,输出答案(如:i为1,输出2(1(i)+1))
问智障chat,一直没给我问明白,现在想通了,写下属于自己的解释