Talvez você realmente queira:
while IFS='|' read -r i j rest <&3; do
{
printf '%s\n' "something with $i and $j"
} 3<&-
done 3< "$INPUTFILE"
Mas o uso de um loop de shell para processar o texto geralmente é o caminho errado a seguir .
Aqui, parece que você precisa:
awk -F '|' '{print $1 ":" $2}' < "$INPUTFILE"
Agora como uma resposta à pergunta no título, para um shell com for
loops usando mais de uma variável, você tem zsh
(parece que você já está usando a sintaxe zsh não citando suas variáveis ou não desabilitar o globbing ao dividir a substituição de comando):
$ for i j in {1..6}; do echo $i:$j; done
1:2
3:4
5:6
Ou a forma mais curta:
for i j ({1..6}) echo $i:$j
O equivalente com shells POSIX:
set -- 1 2 3 4 5 6
## or:
# IFS='
# ' # split on newline
# set -f # disable globbing
# set -- $(awk ...) # split the output of awk or other command
while [ "$#" -gt 0 ]; do
echo "$1:$2"
shift 2
done