Por causa da ordem de avaliação das coisas, echo$i
seria avaliado para a string echo1
(para i=1
) após expansão do alias.
Para poder usar a string como um alias, você precisa reavaliar a string resultante:
for i in 1 2 3; do
eval "echo$i"
done
Se echo1
, echo2
e echo3
foram funções do shell , então o eval
não foi necessário (testado no Bash 4.4).
Suas tentativas com bash -c
não funcionarão, pois os aliases são locais para a sessão atual do shell.
Sua coisa inicial
echo{1..3}
resultaria em
echo1 echo2 echo3
Mesmo que echo1
tenha sido expandido para echo 1
, o resultado foi a saída da string
1 echo2 echo3
Pessoalmente, dependendo do que você queria que os aliases fizessem , eu teria implementado uma função:
dothing () {
printf '%s\n' "$@"
}
... e depois chamou isso com
dothing {1..3}
para produzir
1
2
3
Claro, isso teria sido alcançado com printf '%s\n' {1..3}
diretamente ...