从变量问题读取循环参数时进行bash

时间:2018-10-18 09:16:39

标签: bash while-loop ifs

我有一个带有以下变量的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

我在做什么错?如何重做脚本,因此每次只能处理一个项目?

1 个答案:

答案 0 :(得分:1)

operators_list=$'andrii,bogdan,eios,fre,kuz,pvm,sebastian,tester,tester2,vincent,ykosogon'

因此,您有用,分隔的字符串。您可以通过多种方式做到这一点:

  1. 使用bash数组:

IFS=, read -a operators <<<$operators_list
for op in "${operators[@]}"; do
    echo "$op"
done
  1. 使用while循环,如您所愿:

while IFS= read -d, -r op; do
    echo "$op"
done <<<$operators_list
  1. 使用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"