私は多くのことを試しました。下記参照:
ディレクトリにアクセスしてみてください:/ cygdrive/c/Users/my dir/Documents
$ DOCS="/cygdrive/c/Users/my\ dir/Documents"
$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory
$ cd /cygdrive/c/Users/my\ dir/Documents
(success)
非常に奇妙な振る舞い。手動で入力すると、バックスペースがエスケープ文字を処理します。しかし、変数DOCSでパラメーター拡張を使用するときはそうではありません。
バックスラッシュなしなど、他のバリエーションを試しました。
$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents
$ echo $DOCS
/cygdrive/c/Users/my dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
または
$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ echo $DOCS
/cygdrive/c/Users/my dir/Documents
$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
私はそれが可能であることを知っています。こちらをご覧ください:
$ echo $HOME
/home/my dir
[編集]指摘したように、cd $ HOMEも機能しません。引用符で囲む必要があります。
一体何:
$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory
$ cd "$DOCS"
スペースがWord区切り文字として解析されないようにするには、"$DOCS"
を引用符で囲む必要があります。多くの場合、変数参照は引用符で囲む必要があります。
$HOME
にも同じ問題があることに注意してください。この問題は、シェルが変数参照を評価するときに発生します。使用する変数や変数への割り当て方法とは関係ありません。引用する必要があるのは拡張です。
$ echo $HOME
/home/my dir
これは不正です。 echo
は、実際には2つの文字列/home/my
とdir
をエコーしています。 cd
またはls
を使用すると、実際にどのように機能するかがわかります。
$ ls $HOME
ls: cannot access /home/my: No such file or directory
ls: cannot access dir: No such file or directory
$ cd $HOME
bash: cd: /home/my: No such file or directory
$ cd "$HOME"
<success!>
変数ではなく手動で入力したときになぜ機能するのか尋ねることはできますか?
いい質問です!入力したコマンドを調べてみましょう。
$ DOCS="\"/cygdrive/c/Users/my dir/Documents\""
$ echo $DOCS
"/cygdrive/c/Users/my dir/Documents"
$ cd $DOCS
-bash: cd: "/cygdrive/c/Users/my: No such file or directory
これが機能しないのは、Bashが変数展開内の引用符を解析しないためです。 It does Word分割を実行します。そのため、引用符で囲まれていない変数展開の空白はWordの区切り記号として使用されます。 It does n't引用符を何らかの方法で解析します。つまり、変数内に二重引用符を入れてWord分割をオーバーライドすることはできません。
$ cd $DOCS
このため、cd
には2つのパラメーターが渡されます。 cd
が知っている限り、あなたが書いたように見えます:
$ cd '"/cygdrive/c/Users/my' 'dir/Documents"'
二重引用符がそのままの2つのパラメーター。
解決:
cd "Documents and Photos"
問題が解決しました。
この回答を提出する理由は、StackOverflowが毎日のユーザー(Web開発者、プログラマー、またはパワーユーザーだけでなく)によって使用されており、これがGoogleでの単純なWindowsユーザーの質問に対する一番の結果であることがわかります。
人々は技術に精通しつつありますが、上記の場合のコマンドラインに必ずしも精通しているわけではありません。
$ DOCS="/cygdrive/c/Users/my\ dir/Documents"
これが最初の問題です。次のコマンドを実行するとわかるように、これにより実際のバックスラッシュ文字が$DOCS
に挿入されます。
$ echo "$DOCS"
/cygdrive/c/Users/my\ `
DOCS
を定義するときは、スペース文字をエスケープする必要があります。文字列を引用符で囲むことができます(一重引用符または二重引用符のいずれかを使用)またはバックスラッシュでスペース文字のみをエスケープできます。両方を行うことはできません。 (ほとんどのUnixライクシステムでは、ファイル名またはディレクトリ名にバックスラッシュを使用できますが、それは良い考えではありません。CygwinまたはWindowsでは、\
はディレクトリ区切り文字です。しかし、ディレクトリの実際の名前はmy dir
ではなくmy\ dir
です。
$ cd $DOCS
これは、2つの引数をcd
に渡します。最初はcygdrive/c/Users/my\
で、2番目はdir/Documents
です。 cd
は最初の引数以外をすべて静かに無視することがあります。これはエラーメッセージの説明です。
-bash: cd: /cygdrive/c/Users/my\: No such file or directory
$DOCS
をDocuments
ディレクトリの名前に設定するには、次のいずれかを実行します。
$ DOCS="/cygdrive/c/Users/my dir/Documents"
$ DOCS='/cygdrive/c/Users/my dir/Documents'
$ DOCS=/cygdrive/c/Users/my\ dir/Documents
それが完了したら、Documents
ディレクトリに変更するために、変数参照を二重引用符で囲みます(bashでany変数参照を使用することをお勧めします。値に面白い文字は含まれていません):
$ cd "$DOCS"
また、そのディレクトリにスペースを入れずに名前を付けることを検討することもできますが、Windowsで一般的に行うのは難しい場合があります。
c:\
から移動し、c:\Documents and settings
に移動したい場合は、コンソールに次のように記述します。c:\Documents\[space]+tab
とcygwinはc:\Documents\ and\ settings/
として自動補完します
.cshrc
(または.bashrc
、またはデフォルトのシェルは何でも)に以下を入れてみてください:
alias mydoc 'cd "/cygdrive/c/Users/my dir/Documents"'
初めてこれを行うには、あなたがする必要があります
source .cshrc
この新しいエイリアスでシェルを更新するには、次のように入力します
mydoc
ディレクトリにcd
したいときはいつでも。
怠azineは発明の母です...
わかりました、私もこの問題でいくつかのイライラする時間を過ごしました。私の小さなガイド。
たとえば、デスクトップを開きます。 cmdでディスクを切り替えなかった場合は、次を入力します。
cd desktop
サブフォルダーを表示する場合:
cd、1にするスペースバー、そしてtabを2回押す
ここでSPACE IN NAMEでディレクトリ/ファイルを入力する場合。いくつかのファイル名 f.g.を開いて、それを開くには次のように入力する必要があります:
cd file\name
追伸スラッシュの後のこのスペースに注意してください:)
METHOD1:引用符付き
cd "C:/Prgram Files (x86)"
cd 'C:/Program Files (x86)'
一般化
_
cd 'Folder Path'
_
Method2:引用符を使用しない
cd Program\ Files \(x86\)
一般化次の文字をスキップしたいときはいつでも、ブラックスラッシュ_
\
_を使用します。
上記の質問:_cd /cygdrive/c/Users/my\ dir/Documents
_
試してみる
DOCS="/cygdrive/c/Users/my\ dir/Documents";
cd "$DOCS"
Cygwinには、PC名の間のスペースを認識する問題があります。そのため、これを解決するには、最初のWordの後に「\」を使用し、スペース、次に姓を含める必要があります。
「.../my\dir /」など
$ cd /cygdrive/c/Users/my\ dir/Documents
別の興味深い簡単な方法は、ディレクトリを引用符( "")で囲むことです。
たとえば、次のように実行します。
$ cd c:
$ cd Users
$ cd "my dir"
$ cd Documents
うまくいきますか?
バックスラッシュ記号を使用してスペースをエスケープします
C:\> cd my folder
なります
C:\> cd my\folder