Antworten:
Es ist nicht die Definition, mit der Sie Probleme haben, sondern die Verwendung. Sie müssen die Variable in Anführungszeichen setzen, wo immer Sie sie verwenden. Siehe dieses Beispiel:
oli@bert:~/Music$ export B="$HOME/Music/Yeah Yeah Yeahs/"
oli@bert:~/Music$ cd $B
-bash: cd: /home/oli/Music/Yeah: No such file or directory
oli@bert:~/Music$ cd "$B"
oli@bert:~/Music/Yeah Yeah Yeahs$
Versuchen
export TASK="$HOME/Ubuntu\ One"
In beiden von Ihnen ausgegebenen Exporten ist das Ergebnis, wenn Sie $ TASK wiederholen
/home/user/Ubuntu One
Dies ist nicht das erwartete Verhalten, denn wenn Sie so etwas schreiben
cp $TASK/file somewhere_else/
Bash wird es erweitern auf
cp /home/user/Ubuntu One/file somewhere_else/
das ist natürlich falsch.
Deshalb müssen wir unseren Pfad in Anführungszeichen setzen und dem Leerzeichen entkommen.
Auf dieser Seite wird das Problem ausführlich erläutert. Es ist eine gute Idee, es gründlich zu lesen http://mywiki.wooledge.org/Arguments
Dieses unangenehme und ungeschickte Verhalten ist das Ergebnis einer unklugen Wahl im Namen des Verzeichnisses "Ubuntu One". Leider scheint dafür keine Lösung geplant zu sein.
Eine Möglichkeit ist die Verwendung von Dropbox, die ähnliche Funktionen bietet.
Anstatt auf Dropbox zurückzugreifen, habe ich einen symbolischen Link erstellt:
ln -s Ubuntu\ One UbuntuOne
In meinem speziellen Fall wollte ich Python-Module aus einem Verzeichnis in meiner Cloud importieren:
ln -s Ubuntu\ One/pythonfiles pythonfiles
export PYTHONPATH="$PYTHONPATH:$HOME/pythonfiles/"
Ich stimme zu, es ist idiotisch, Leerzeichen in Linux-Dateinamen einzufügen.
TASK
oderPATH
? Stellen SiePATH
mit einTASK
? Wenn das so ist, wie?