bash - bash while 从变量问题中读取循环参数
问题描述
我有一个带有以下变量的 bash 脚本:
operators_list=$'andrii,bogdan,eios,fre,kuz,pvm,sebastian,tester,tester2,vincent,ykosogon'
while IFS=, read -r tech_login; do
echo "... $tech_login ..."
done <<< "$operators_list"
我需要从变量中读取参数并在循环中使用它们。但它只返回一次所有项目的回声:
+ IFS=,
+ read -r tech_login
+ echo '... andrii,bogdan,eios,fre,kuz,pvm,sebastian,tester,tester2,vincent,ykosogon ...'
... andrii,bogdan,eios,fre,kuz,pvm,sebastian,tester,tester2,vincent,ykosogon ...
+ IFS=,
+ read -r tech_login
我究竟做错了什么?如何重新编写脚本,使其每次只能使用一项?
解决方案
operators_list=$'andrii,bogdan,eios,fre,kuz,pvm,sebastian,tester,tester2,vincent,ykosogon'
所以你有用 . 分隔的字符串,
。您可以通过多种方式做到这一点:
- 使用 bash 数组:
IFS=, read -a operators <<<$operators_list
for op in "${operators[@]}"; do
echo "$op"
done
- 使用 while 循环,就像你想要的那样:
while IFS= read -d, -r op; do
echo "$op"
done <<<$operators_list
- 使用 xargs,因为为什么不:
<<<$operators_list xargs -d, -n1 echo
IFS 和读取分隔符的事情是:read
读取直到用-d
. 然后在 read
读取了一个完整的字符串(通常是整行,因为默认分隔符是换行符)之后,然后使用分隔符将字符串拆分为多个部分IFS
。这样你就可以:
while IFS=: read -d, -r op1 op2; do
echo "$op1" "$op2"
done <<<"op11:op12,op12:op22"
推荐阅读
- ios - 如何在 swift 中使基类属性通用,以便与多种模型类型一起使用?
- python - 有太多 uwsgi OSError 消息
- python - 为什么我不能正确使用 pandas.DataFrame.plot.bar()?
- node.js - 如何使用 NodeGit 列出所有文件?(相当于'git ls-files')
- javascript - 如何在 React JS 中遍历地图
- r - 在 Linux 上的 Rstudio 中绘制图形时出错。PangoCairo_Text 中的无效字符串
- javascript - Angular Dialog 更改总是覆盖 UI
- python - 如何在 python 上替换 dt.datatable 上的整列值?
- firebase - @typescript-eslint/no-misused-promises 和 new Promise(() => return resolve())
- android - 如何在 CoroutineWorker 中获取 WorkRequest Id