【问题标题】:Understanding for loop理解 for 循环
【发布时间】:2020-03-12 10:10:12
【问题描述】:

谁能帮我理解下面的代码

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

1) 在外部循环的第一次迭代后,IFS 值如何再次重置为新行,因为外部 for 循环从第 3 行开始,我在第 2 行为 IFS 分配换行符。

2) 当我在外循环和内循环中执行 echo $IFS 时,它会显示为空白。知道为什么。

谁能解释一下这是怎么工作的

test.txt:

cat test.txt

oracle:dba
network:admin
system:engineer

test.sh:

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

【问题讨论】:

    标签: linux bash for-loop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 2017-09-11
        • 2013-10-15
        • 2023-03-11
        • 2016-01-05
        • 2019-05-01
        相关资源
        最近更新 更多