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

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

名前にスペースが含まれるファイル

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

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

 catファイルname.txt 

エスケープ文字または引用符を使用せずにコマンドを実行する

:ファイル名は任意ですが、この記事では「 ファイル名.txt 」を例として使用します

ここで、 ' cat 'コマンドは、 ファイル名前を単一の引数ではなく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 」などのコマンドが適切に機能するように、 ソース宛先の両方に個別に引用符を付ける必要があります。 また、パスにエスケープ文字を使用する方がはるかに複雑であり、ユーザーがそれを間違える可能性があることを示す以下の例を確認できます。

引用とエスケープ文字の違い

興味深い記事