A substituição de parâmetros não funciona assim, pelo menos não no bash. Você precisa de uma variável real (parâmetro) e operar diretamente nela. Então, por exemplo, assim:
var=$(echo abcdefgh | cmd1 | cmd2 | ... )
var2="${var:2:4}"
A exceção é zsh
, onde você pode converter a substituição de comandos para o parâmetro "on the fly" e fazer isso acima em uma linha:
var2=${"$(echo abcdefgh | cdm1 | cmd2 | ... )":2:4}