2016-04-29 4 views
1

Ich versuche, mit den folgenden in bash um erfolgreich zu sein:Bash-Umgebungsvariable mit Leerzeichen. cd ohne Anführungszeichen

mkdir "any dir" 
export DIR="any dir" 
cd $DIR 

und es gibt mir -bash: cd: any: No such file or directory

Ich weiß, es mit

cd "$DIR" 

funktionieren würde, aber ich weiß nicht Ich möchte dies verwenden, da eine Menge von Skripts, die ich nicht berühren möchte, cd $DIR verwendet.

Gibt es wirklich keine Möglichkeit, dies mit bash zu erreichen? Auch die Windows-Eingabeaufforderung dies ermöglicht durch

mkdir "any dir" 
set DIR=any^ dir 
cd %DIR% 
+4

Wenn diese Skripte 'cd $ DIR' verwenden, dann sind das Fehler, die behoben werden müssen. Versuche nicht, sie zu umgehen. repariere sie! – chepner

Antwort

1

Eine mögliche Flickschusterei ist [[:blank:]] statt Raum wie folgt zu verwenden:

export DIR='any[[:blank:]]dir' 
cd $DIR 

Jetzt wird es ohne Fehler arbeiten, da Shell nicht any[[:blank:]]dir als 2 verschiedenen behandeln Argumente.

[[:blank:]] ist eine POSIX-Eigenschaft, die Leerzeichen oder Tabulatorzeichen abgleicht.

+1

Danke! Nicht leicht, diese Antwort zu finden :) – ralph

+1

Ein (extrem geringfügiger) Vorbehalt: Dies wird nicht funktionieren, wenn 'set -f' in Kraft ist, weil' any [[:: blank:]] dir 'keine Dateinamenerstellung erfährt, und '[[:: blank:]]] wird wörtlich behandelt. – chepner

+0

Es lässt die Möglichkeit, dass "alle dir" und "beliebige dir" möglicherweise verwirrt werden könnte, (vorausgesetzt, beide existieren), oder noch schlimmer, ausgenutzt, (angenommen beide existieren, heimlich). – agc

0

fügen Sie einfach DIR zwischen "Charakter.

mkdir "any dir" 
export DIR="any dir" 
cd "$DIR" ## change $DIR to "$DIR" 
+1

In meiner Lubuntu-Box funktioniert diese Methode nicht bei ** Bindestrich ** (POSIX) oder ** Bash **. – agc

+0

Es funktioniert auch nicht für mich in BASH 4.3 – anubhava

+1

Wie erwähnt, bin ich nicht bereit, die 'cd $ DIR' Zeile zu berühren. – ralph

0

Während es bevorzugt sein kann, die Art und Weise die Variable mit dem referenziert zu reparieren Befehl‚cd‘, in einer Situation, in der diese Option nicht verfügbar ist,

Sie können die folgende Vorgehensweise in der Schale verwenden;

export DIR="any?dir" 
cd $DIR 

Dies ist mit einem einzelnen Zeichen Wildcard in den Umgebungsvariablen und der cd Befehl übereinstimmen der Raum in "jedem Dir" als Ergebnis.

Das Problem ist, dass dies nur funktioniert, wenn Sie auf ein Verzeichnis oder eine Datei zugreifen, deren Name der Variablen entspricht. Sie können es nicht verwenden erstellen beliebige Verzeichnisse oder Dateien.