O problema não é que sua variável ambiental contenha um espaço. Você está esquecendo de citar seus argumentos :
cd "$Foo"
Se você não citar $Foo
, o comando cd
verá dois (ou mais) argumentos, já que espaço em branco por padrão separa argumentos . No seu caso específico, você passaria /media/foo/can
e haz/bar
separadamente, já que o shell os divide no espaço. As variáveis de cotação dupla são um bom hábito para se desenvolver e você economizará em muitos casos em que o espaço em branco está envolvido.
Se você quiser uma maneira realmente feia de conseguir isso sem aspas, sobrescreva seu cd
incorporado assim:
cd() { builtin cd "$*"; }
Isso funcionará se o caminho contiver espaços, pois $*
conterá os argumentos individuais ( /media/foo/can
e haz/bar
), separados pelo primeiro caractere IFS (geralmente um espaço) e, em seguida, você os colará juntamente com as aspas duplas.
No entanto, nunca é uma boa ideia substituir os builtins dessa forma.