Em traço , cada comando em Pipelines executar em subshell ( zsh e AT & T ksh , o comando mais à direita em pipelines doesn 't ), então as variáveis X e Y não existem mais quando o comando é feito.
Simplesmente, você pode usar Expansão de Parâmetros , tente:
$ set -- foo:123
$ X=${1%:*}
$ Y=${1#*:}
O exemplo é usado para sessões interativas.
Dentro do seu script, você não precisa de set -- foo:123 .