bash while 从变量问题中读取循环参数
bash while read loop arguments from variable issue
我有一个带有以下变量的 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"
我需要从变量中读取参数并在循环中使用它们。但它 returns 只对所有项目回显一次:
+ 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
指定的定界符。然后 after read
读取了一个完整的字符串(通常是整行,因为默认分隔符是换行符),然后使用 IFS
作为分隔符将字符串拆分成多个部分。所以你可以:
while IFS=: read -d, -r op1 op2; do
echo "$op1" "$op2"
done <<<"op11:op12,op12:op22"
我有一个带有以下变量的 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"
我需要从变量中读取参数并在循环中使用它们。但它 returns 只对所有项目回显一次:
+ 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
指定的定界符。然后 after read
读取了一个完整的字符串(通常是整行,因为默认分隔符是换行符),然后使用 IFS
作为分隔符将字符串拆分成多个部分。所以你可以:
while IFS=: read -d, -r op1 op2; do
echo "$op1" "$op2"
done <<<"op11:op12,op12:op22"