Kornshellを実行し、ディレクトリツリーをトラバースしようとしています。次の名前のサブディレクトリにcdしたいとします。
-3ab_&_-3dc.img
私の質問は、この名前のアンパサンドをどのようにエスケープする必要があるのですか?二重引用符とバックスラッシュのさまざまな組み合わせを試しましたが、成功しませんでした。
&
(または他のほとんどすべての文字)には、2つの単純な可能性があります。
' -3ab_&_-3dc.img'
-3ab_\&_-3dc.img
2つの例外があります。
foo'bar\qux
の場合:cd 'foo'\''bar\qux'
。そのように覚えておくことができます。単一引用符内では、'\''
は単一引用符を取得します。二重引用符も使用できますが、その場合は一部の文字の前にバックスラッシュを置く必要があります。単一引用符はより簡単です。
ここには、ディレクトリの名前がダッシュで始まるという、もう1つの問題があります。その文字は、オプションが続くことを(ほとんどすべてのコマンドと同様に)cd
コマンドに伝えます。ダッシュはシェルに特別なものではなく、コマンドに固有なので、引用符はシェルに影響しません。オプションとして解釈せずに、ダッシュで始まる引数をコマンドに渡す方法は2つあります。
./
を追加しても、同じファイルを指定します。--
を前に置きます。これは、オプションの検索を停止するようにコマンドに指示します。そこで、このサブディレクトリに変更する方法をいくつか紹介します。
cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
アンパサンドはエスケープする必要がありますが、アンパサンドではなく先頭の-
に問題がある可能性があります。先頭の-
により、cdはオプションを渡していると考えさせました。これを回避するには、./
を使用します。
cd './-3ab_&_-3dc.img'