首页 > 解决方案 > 为什么这个for循环只循环一次?

问题描述

我想做的是一个简单的练习代码,输出如下:

user1 logged in at hh:mm
user2 logged in at hh:mm
...

所以我写了一个基本的for循环,但我不明白为什么它只运行一次。

for user in $(who)
do
    USERID=$(echo $user | tr -s ' ' | cut -d' ' -f1)
    LOGTIME=$(echo $user | tr -s ' '| cut -d' ' -f4)
    echo "$USERID logged in at $LOGTIME"
done

这与以下内容相呼应:

user1
user2
user3 logged in at hh:mm
hh:mm
hh:mm

我已经在两者之间放置了回显线以弄清楚发生了什么以及如何修复它,但我唯一发现的是 for 循环只运行一次,所以 USERID 和 LOGTIME 只是一个带有换行符的长字符串。我究竟做错了什么?(我做了 IFS=$'\n')

标签: bashshellunix

解决方案


请您尝试以下方法:

while read -r user tty mon day logtime; do
    echo "$user logged in at $logtime"
done < <(who)

推荐阅读