有人能帮我理解一下下面的代码吗?
我将IFS重置为脚本本身第二行中的换行符。该值由out for命令读取。在inner命令中,我将IFS值重置为:
1)当外部循环的第一次迭代作为外部for循环从第三行开始,并且我将换行符分配给第二行的IFS后,IFS值如何再次重置为新行。
2)当我在外部循环和内部循环中执行echo $IFS时,它是空白的。知道为什么吗。
有人能解释一下这是怎么工作的吗?
test.txt:
cat test.txt
oracle:dba
network:admin
system:engineertest.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发布于 2020-03-12 18:14:33
不需要为外部循环重置IFS。在循环开始之前,使用IFS拆分$(cat test.txt)的结果,而不是每次在循环中再次拆分。
发布于 2020-03-12 20:34:16
不要使用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.txthttps://stackoverflow.com/questions/60651797
复制相似问题