アンパサンドを含むサブディレクトリ名をエスケープするにはどうすればよいですか?


9

Kornshellを実行し、ディレクトリツリーをトラバースしようとしています。次のような名前のサブディレクトリにcdしたいとします。

 -3ab_&_-3dc.img

私の質問は、この名前のアンパサンドをどのようにエスケープする必要があるのですか?二重引用符とバックスラッシュのさまざまな組み合わせを試しましたが、成功しませんでした。

回答:


11

&(または他のほとんどすべてのキャラクターについては、2つの単純な可能性があります。

  • 全体を一重引用符で囲みます。 ' -3ab_&_-3dc.img'
  • 問題のある各文字の前にバックスラッシュを置きます: -3ab_\&_-3dc.img

2つの例外があります。

  • 単一引用メソッドは、単一引用に対しては機能しません。バックスラッシュは一重引用符内では特別なものではないため、直接使用することもできません。できることは、単一引用符で囲まれた文字列を終了し、すぐにバックスラッシュと単一引用符を使用して、単一引用符を再起動することです。したがって、たとえば、ディレクトリの名前があればですfoo'bar\quxcd 'foo'\''bar\qux'。あなたはそれをそのように思い出すことができます:一重引用符の中で、一重引用符を'\''取得します。
  • バックスラッシュメソッドは改行に対しては機能しません。バックスラッシュ-改行は無視されます。改行を一重引用符で囲む必要があります。

二重引用符も使用できますが、一部の文字の前にバックスラッシュを置く必要があります。単一引用符はより簡単です。

ここには、ディレクトリの名前がダッシュで始まるという、もう1つの問題があります。その文字は、cdコマンドが(ほとんどすべてのコマンドと同様に)オプションに続くことを伝えます。ダッシュはシェルにとって特別なものではなく、コマンドにとって特別なものなので、引用符はシェルに影響を与えません。オプションとして解釈せずに、ダッシュで始まる引数をコマンドに渡す方法は2つあります。

  • この議論を表現する別の方法を見つけてください。ファイル名の場合./、前に追加しても同じファイルが指定されます。
  • --前に引数を置きます。これは、オプションの検索を停止するようにコマンドに指示します。

そこで、このサブディレクトリに変更する方法をいくつか紹介します。

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'

ありがとう。私もそのフォーマットを試したと思いましたが、アンパサンドをエスケープするのを忘れました(3番目の例のように)。私がやったとき、それはうまくいきました。
RCinICT 2013年

5

アンパサンドはエスケープする必要がありますが-、アンパサンドではなく先頭のに問題がある可能性があります。主要な-cdは、オプションを渡していると考えさせました。あなたはこれを使ってこれを回避することができます./

cd './-3ab_&_-3dc.img'

これ&は間違いなく問題です。については-、シェルによって異なります。Zshはcd、で始まるディレクトリに移動できて非常に満足してい-ます。しかし、bashはそうではありません。
Patrick

ありがとう。私もそのフォーマットを試したと思いましたが、アンパサンドをエスケープするのを忘れました。私がやったとき、それはうまくいきました。
RCinICT 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.