Asumiendo que los valores no tienen líneas nuevas, entonces :Su código con cambios mínimos para que funcione :El shebang debe ser#!/bin/bash
(ksh o zsh )ya que está usando <<<
.
i=1
while [ "$i" -le 4 ]
do
A=$(awk -v var="$i" -F_ '{print $var}' <<< 'one_two_test_three')
echo "$A"
i=$((i+1))
done
Sin embargo, como la cadena proviene del caparazón, esto podría simplificarse a:
IFS=_ read v1 v2 v3 v4 <<<'one_two_test_three'
printf '%s\n' "$v1" "$v2" "$v3" "$v4"
Y usando una matriz de valores (número variable de valores):
#!/bin/bash
IFS=_ read -a v <<<'one_two_test_three'
printf '%s\n' "${v[@]}"
Si se requiere que se use un shell más simple:
#!/bin/sh
IFS=_ read v1 v2 v3 v4 <<-_expandvar_
one_two_test_three
_expandvar_
printf '%s\n' "$v1" "$v2" "$v3" "$v4"
Por supuesto, si no hay necesidad de establecer una variable ni es un problema establecer el valor de IFS en un script:
#/bin/sh
a='one_two_test_three'
IFS=_
set -f
printf '%s\n' $a
Tenga en cuenta que la variable se está utilizando sin -entre comillas, lo que puede ser inseguro.