112

macOS X で Bash を使用しており、実行時に別のディレクトリに変更される単純な実行可能スクリプト ファイルを作成したいと考えています。ただし、そのディレクトリへのパスにはスペースが含まれています。一体どうやってこれをするのですか?これは私が持っているものです...

ファイル名:cdcode

ファイルの内容:

cd ~/My Code

確かに、これは長いパス名ではありませんが、実際のパス名は 5 つのディレクトリの深さであり、そのうちの 4 つのディレクトリのパスにはスペースが含まれています。

ところで、私は試してみましたがcd "~/My Code"cd "~/My\ Code"どちらもうまくいきませんでした。

4

14 に答える 14

94

パスを二重引用符で囲むと、チルダ展開が停止します。したがって、これを行うにはいくつかの方法があります。

cd ~/"My Code"
cd ~/'My Code'

チルダはここでは引用されていないため、チルダ展開は引き続き実行されます。

cd "$HOME/My Code"

二重引用符で囲まれた文字列内で環境変数を展開できます。これは基本的にチルダ展開が行っていることです

cd ~/My\ Code

バックスラッシュを使用して特殊文字 (スペースなど) をエスケープすることもできます。

于 2009-02-26T05:23:12.740 に答える
48

このページで以下の解決策を見つけました:

x="test\ me"  
eval cd $x

\二重引用符で囲まれたテキスト定数とevalbeforeの組み合わせは、cd魔法のように機能します!

于 2010-06-13T15:52:57.967 に答える
10

次のいずれかを使用できます。

cd ~/"My Code"
cd ~/M"y Code"
cd ~/My" Code"

以下は使用できません。

cd ~"/My Code"

最初の方法は、シェルが ~/ を $HOME/ に展開し、二重引用符なしで My Code を追加するため機能します。"' ' (二重引用符)という名前のユーザー~"がマップ先にないため、2 番目は失敗します。

于 2009-02-26T05:22:44.943 に答える
10
cd ~/My\ Code

私にはうまくいくようです...引用符を削除してもスラッシュを維持してもうまくいかない場合は、サンプルコードを投稿できますか?

于 2009-02-26T04:55:00.813 に答える
4

単一のバックスラッシュが機能します:

ry4an@ry4an-mini:~$ mkdir "My Code"

ry4an@ry4an-mini:~$ vi todir.sh

ry4an@ry4an-mini:~$ . todir.sh 

ry4an@ry4an-mini:My Code$ cat ../todir.sh 
#!/bin/sh
cd ~/My\ Code

問題は、シェル スクリプトがサブシェルのディレクトリを変更することではなく、完了したらメイン シェル (および元のディレクトリ) に戻ることではないでしょうか? を使用することでそれを回避しました。現在のシェルでスクリプトを実行しますが、ほとんどの人はこれにエイリアスを使用します。スペースはニシンかもしれません。

于 2009-02-26T04:57:52.863 に答える
3

スクリプトでは ~ を避けてください。代わりに $HOME を使用してください。

于 2015-06-10T06:06:25.603 に答える
2

Linux で作業する場合、以下の構文は正しいです。

cd ~/My\ Code

ただし、ファイルを実行するときは、次の構文を使用します。

$ . cdcode

(「./」ではなく「.」のみ)

于 2009-02-26T05:02:12.963 に答える
2

二重引用符を使用する

go () 
{ 
    cd "$*"
}
于 2014-05-15T15:31:08.733 に答える
2

次のように一重引用符を使用します。

myPath=~/'my dir'

cd $myPath
于 2018-05-24T01:37:05.787 に答える
2

これを行う非常に簡単な方法は-

 $ cd My\ Folder

bash で DIR コマンドを実行すると、結果にスペースを含むフォルダーまたはパス名が次のように結果に書き込まれていることがわかります。

$dir
My\ Folder
New\ Folder
于 2017-04-28T10:04:52.373 に答える
1

bashスクリプトを使用してデータをダンプしていた場合、同様の問題が発生しました。最終的に、スクリプトフォルダーにスペースを入れずにシンボリックリンクを作成しました。次に、スクリプトでシンボリック リンクを指定すると、問題なく動作します。

リンクを作成するには。ln -s [ターゲット ディレクトリまたはファイル] ./[ショートカット]

まうか使い物にならないかもしれません。

于 2010-05-13T09:20:19.030 に答える