bash - 为什么这个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')
解决方案
请您尝试以下方法:
while read -r user tty mon day logtime; do
echo "$user logged in at $logtime"
done < <(who)
推荐阅读
- javascript - 我应该如何将 *.eslintrc* 更新为 ESLint 查看更改?
- typo3 - 是否可以在分面搜索 (ke_search) 中索引自定义文档?
- php - 如何重复 php "if" 20 次?
- c++ - 函数模板参数推导(类 vs 函数模板)
- jenkins - 使用jenkins管道共享库时,sh ''' '''中的函数参数将为null
- javascript - 在javascript中删除字符串中的文件扩展名
- javascript - 异步/等待无法按预期工作
- arrays - 苗条框架中的格式错误的 JSON
- reactjs - 使用 StackNavigator 将 Native 从子组件反应到父组件
- java - 创建名为“scopedTarget.jobRepository”的 bean 时出错:范围“step”对于当前线程无效;考虑为 th 定义一个作用域代理