**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
四个月前关门了。
Improve this question
我想创建一个可以读取文本文件的shell。
文件users_test.txt
如下所示:
标题- * 组:团队:用户 *
Group_A:Team_Red Team_Green:worker_1 worker_2 worker_2 worker_3
Group_B:Team_Blue Team_Black Team_Grey:worker_4 worker_2 worker_5 worker_6
我想遍历上面用冒号分隔的.txt文件。下面是我目前的解决方案。
# !/bin/bash
# set filename
FILENAME="users_test.txt"
# loop through file, each line is divided into 3 fields separated by a colon (:)
while IFS=':' read -r groups teams users
do
echo "group $groups has teams $teams and user $users"
for team in $teams; do
echo "hey: "$team
done
for group in $groups; do
echo "hi: "$group
done
# Iterate the string variable using for loop
for user in $users; do
echo "hello: "$user
done
done < "$FILENAME"
为什么它在第一次循环迭代后就结束了?
输出:
admin@computer:$ ./setup-test1.sh
group has teams Team_Red Team_Green and user worker_1 worker_2 worker_2 worker_3
hey: Team_Red
hey: Team_Green
hi: Group_A
hello: worker_1
hello: worker_2
hello: worker_2
hello: worker_3
admin@computer5:$
它看起来工作正常,但它在第一行之后结束,因此B组未打印。
有人能告诉我为什么脚本只读取包含Group_A的第一行,而不读取包含Group_B的第二行吗?
1条答案
按热度按时间enyaitl31#
考虑到您的评论,您的文件没有以换行符结尾,
0a
:尝试读取此类文件时的区别如下:
结尾没有换行符的文件不是有效的文本文件,因此尝试使用任何文本处理工具读取该文件(例如read-注意“标准输入应为文本文件。”)是未定义的行为。不值得浪费时间在任何工具对这样的文件做什么以及为什么做上,如果你想对它们做进一步的文本处理,就不要创建这样的文件。如果你的编辑器创建文件时没有终止换行符,那就换一个新的编辑器,比如
vi
。