Se você simplesmente escrever $i
, os espaços transformarão seu conteúdo variável em vários argumentos. Se você quer preservar espaços, você tem que citar coisas.
Para o seu exemplo, você provavelmente quer:
cdx () { cd -- "$(dirname -- "$1")" ; }
E lembre-se sempre cite suas variáveis.