用read读取文件重定向代码解释bash

代码:

#!/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,一直没给我问明白,现在想通了,写下属于自己的解释

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值