Bashでスペースを含むファイル名の受け渡しを処理する方法

Linuxには、システムのコマンドを実行するためのデフォルトのシェルBash(別名Bourne againシェル)があります。ほとんどのプログラマーは、bashが提供する柔軟性と強力なコマンドラインインタープリターのために、cmdよりもbashを好みます。ただし、ほとんどのユーザーは、bashでスペースを含むファイル名の受け渡しを処理しようとすると問題が発生します。これは、bashではスペースがファイル名と同じとは見なされないためです。

スペースを含むファイル名がBashによって認識されないのはなぜですか?

Bashでは、エスケープ文字(\)または引用符なしで複数の単語を入力すると、すべての単語が引数と見なされます。これは、「cd」でディレクトリを変更する場合でも、「cat」コマンドでファイルにアクセスしようとする場合でも、すべての操作に適用されます。これらを使用した後に書いたものはすべて引数と見なされます。例えば:

catファイル名.txt

:ファイル名は何でもかまいませんが、この記事では、例として「filename.txt」を使用します

ここで、「cat」コマンドは、ファイル名前を1つの引数ではなく2つの引数と見なします。ただし、エスケープ文字または引用符を使用する場合、bashシェルはそれを単一の引数と見なします。これは「ファイル名.txt」になります。

Bashにスペースを含むファイル名

名前のスペースに使用できる方法はいくつかあります。ベストプラクティスは、将来的にファイル名のスペースを避けることです。簡単な方法は、アクセスしようとしているファイルの名前を変更してスペースを削除することです。他のいくつかの方法では、スペースを含むファイル名に一重引用符または二重引用符を使用するか、スペースの直前にエスケープ(\)記号を使用します。それがどのように機能するかを示すために、適用例を含むメソッドを提供します。

方法1:単一引用符と二重引用符を使用する

  1. ホールドはCtrl + Altキーのキーとキーを押しTをオープンするターミナル
  2. 次に、ディレクトリをファイルのある場所に変更します。

    (コマンド「cat」の後にファイルをターミナルにドラッグアンドドロップすることもできます。これにより、ファイルのパス/ディレクトリに自動的に引用符が付けられます)

    cdデスクトップ

    :デスクトップは、アクセスしようとしている場所に変更できます。

  3. 次のコマンドを入力して、名前にスペースが含まれるテキストファイルを読み取ります。
    cat 'ファイル名.txt'

    または

    cat "file name.txt"
  4. 一重引用符と二重引用符は同じ結果になります。場合によっては、両方を試して、どちらが機能するかを確認する必要があります。

方法2:円記号のエスケープ文字を使用する

  1. ホールドはCtrl + Altキーのキーとキーを押しTをオープンするターミナル
  2. 次のコマンドを使用して、ディレクトリをファイルのある場所に変更します。
    cdデスクトップ

    :デスクトップの代わりに場所の名前を入力してください。

  3. 次に、コマンドを入力し、名前にスペースがある場所でエスケープ文字を使用します。
    cat file \ name.txt

ボーナス:引用符とエスケープの使用

コマンドでディレクトリを使用している場合、パス全体で引用符を使用すると結果が生じることがあります。これは、「mv」や「cp」などの一部のコマンドは、引用符が全体として使用されている場合、パスをファイルソースと見なすためです。' cp 'のようなコマンドが正しく機能するように、ソース宛先の両方に個別に引用符を指定する必要があります。以下の例を確認することもできます。これは、パスにエスケープ文字を使用する方がはるかに複雑であり、ユーザーがそれを間違える可能性があることを示しています。