Para usar um espaço no mundo do Linux, você precisa fazer um (e apenas um) dos seguintes:
-
Cite todas as coisas:
JAVA_HOME="/mnt/c/Program Files/Java/jdk1.8.0_91/" cd "$JAVA_HOME"
-
Escape do espaço:
JAVA_HOME=/mnt/c/Program\ Files/Java/jdk1.8.0_91/ cd "$JAVA_HOME"
Mas não os dois. A questão aqui é que a citação protege a string citada e faz com que ela seja interpretada literalmente. Então, enquanto foo\ bar
significa foo
, um espaço e, em seguida, bar
, "foo\ bar"
significa foo
, uma barra invertida, um espaço e, em seguida, bar
.
Além disso, sempre que você usar uma variável, você deve colocá-la dentro de aspas duplas. Caso contrário, o comando para o qual você está passando lerá dois argumentos. Você pode ver o que deu errado se você ativar a depuração bash executando set -x
(execute set +x
para desativá-la):
$ set -x
$ cd $JAVA_HOME
+ cd /mnt/c/Program Files/Java/jdk1.8.0_91/
bash: cd: too many arguments
O que você executou foi cd /mnt/c/Program Files/Java/jdk1.8.0_91/
. Como o espaço em branco separa argumentos, isso significa que você passou cd
dois argumentos separados: /mnt/c/Program
e Files/Java/jdk1.8.0_91/
. As citações fazem com que cd
(ou qualquer outra ferramenta) leia tudo como um único argumento.
Leitura adicional: