首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解for循环

了解for循环
EN

Stack Overflow用户
提问于 2020-03-12 18:10:13
回答 2查看 48关注 0票数 0

有人能帮我理解一下下面的代码吗?

我将IFS重置为脚本本身第二行中的换行符。该值由out for命令读取。在inner命令中,我将IFS值重置为:

1)当外部循环的第一次迭代作为外部for循环从第三行开始,并且我将换行符分配给第二行的IFS后,IFS值如何再次重置为新行。

2)当我在外部循环和内部循环中执行echo $IFS时,它是空白的。知道为什么吗。

有人能解释一下这是怎么工作的吗?

test.txt:

代码语言:javascript
复制
cat test.txt

oracle:dba
network:admin
system:engineer

test.sh:

代码语言:javascript
复制
cat test.sh

#!/bin/bash
# changing the IFS value

IFSOLD=$IFS
IFS=$'\n'
for entry in $(cat test.txt)
do
    echo "Values in $entry "
    IFS=:
    for value in $entry
    do
      echo " $value"
    done
done



sh test.sh

Values in oracle:dba
 oracle
 dba
Values in network:admin
 network
 admin
Values in system:engineer
 system
 engineer
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 18:14:33

不需要为外部循环重置IFS。在循环开始之前,使用IFS拆分$(cat test.txt)的结果,而不是每次在循环中再次拆分。

票数 2
EN

Stack Overflow用户

发布于 2020-03-12 20:34:16

不要使用for循环来iterate over the lines of a file;使用while循环。

然后使用read将每一行拆分为一个由单个值组成的数组。

代码语言:javascript
复制
while IFS= read -r entry; do
    echo "Values in $entry"
    IFS=: read -a values <<< "$entry"
    for value in "${values[@]}"; do
        echo " $value"
    done
done < test.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60651797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档