【Bash入門】スペースを含むファイル名を正しく扱う方法|クォートとエスケープの使い方
Linuxには、システム上でコマンドを実行するためのデフォルトシェルとしてBash(Bourne Again Shell)が搭載されています。Bashは柔軟性が高く、強力なコマンドラインインタプリタを提供するため、多くのプログラマーがcmdよりもBashを好んで使用しています。しかし、スペースを含むファイル名を渡そうとすると、多くのユーザーがつまずいてしまいます。これは、Bashにおいてスペースがファイル名内のスペースとは異なる意味を持つように解釈されるためです。
なぜBashはスペースを含むファイル名を正しく認識しないのか?
Bashでは、エスケープ文字(\)や引用符なしに複数の単語を入力すると、それらすべてが個別の引数として解釈されます。これは「cd」コマンドでディレクトリを移動する場合も、「cat」コマンドでファイルにアクセスする場合も同様です。これらのコマンドの後に記述した内容は、すべて引数として扱われます。例えば以下のように入力したとします。
cat file name.txt
注: ファイル名は何でも構いませんが、この記事では「file name.txt」を例として使用します。
この場合、「cat」コマンドは「file」と「name」を1つの引数ではなく、2つの別々の引数として認識します。しかし、エスケープ文字や引用符を使用すれば、Bashシェルはそれを「file name.txt」という単一の引数として正しく処理します。
Bashでスペースを含むファイル名を扱う方法
スペースを含む名前に対処する方法はいくつかあります。まず前提として、今後作成するファイル名にはスペースを使わないことがベストプラクティスです。最も簡単な対処法は、アクセスしたいファイルの名前を変更してスペースを取り除くことです。その他の方法としては、スペースを含むファイル名をシングルクォートまたはダブルクォートで囲む方法や、スペースの直前にエスケープ文字(\)を付ける方法があります。以下では、実際の例とともにそれぞれの方法を詳しく紹介します。
方法1: シングルクォートとダブルクォートを使う
- Ctrl + Altキーを押しながらTキーを押して、ターミナルを開きます。
- 次に、ファイルが保存されているディレクトリへ移動します。
(「cat」コマンドの後にファイルをターミナルへドラッグ&ドロップすることもできます。この場合、ファイルパスやディレクトリに自動的に引用符が付与されます)
cd Desktop
注: 「Desktop」の部分は、実際にアクセスしたい場所の名前に置き換えてください。
- 名前にスペースを含むテキストファイルを読み込むには、次のいずれかのコマンドを入力します。
cat 'file name.txt'
または
cat "file name.txt"
シングルクォートでもダブルクォートでも結果は同じになります。ただし、ケースによっては両方を試して、どちらが正常に機能するか確認する必要がある場合もあります。
方法2: バックスラッシュによるエスケープ文字を使う
- Ctrl + Altキーを押しながらTキーを押して、ターミナルを開きます。
- 次のコマンドで、ファイルが保存されているディレクトリへ移動します。
cd Desktop
注: 「Desktop」の部分は、実際の場所の名前に置き換えてください。
- コマンドを入力し、ファイル名の中でスペースが存在する箇所すべてにエスケープ文字を付けます。
cat file\ name.txt
おまけ: 引用符とエスケープの使い分けのポイント
コマンドでパスを指定する際、パス全体を引用符で囲むと思わぬ問題が発生することがあります。これは、「mv」や「cp」などの一部のコマンドでは、パス全体を引用符で囲むと、そのパスがコピー元(ソース)としてのみ解釈されてしまうためです。「cp」などのコマンドを正しく動作させるには、コピー元とコピー先の両方に対して、それぞれ個別に引用符を付ける必要があります。また、下の例を見るとわかるように、パス全体にエスケープ文字を適用する方法ははるかに複雑で、ユーザーがミスを犯しやすいという点にも注意が必要です。
-
Matplotlibで漸近線・不連続点を含むグラフを正しく描画する方法
はじめにMatplotlibで y = 1/x のような関数をそのままプロットすると、x = 0 付近で値が発散し、グラフ上に不自然な縦線が表示されてしまうことがあります。これは数値計算では厳密な「無限大」を扱えず、0に極めて近い大きな値として計算されるためです。本記事では、numpyとMatplotlibを組み合わせて、漸近線(不連続点)を持つ関数を見やすく描画する手順を解説します。処理の手順numpyを使ってx・yのデータポイントを作成します。plt.axis(off) で軸の表示をオフにします。plot() メソッドでx・yのデータをもとに曲線を描画します。axhline() で水平方向
-
Bashエイリアスを使えば7z圧縮はコマンド1つで完了!設定方法を徹底解説
ファイルの容量を節約したり、複数のファイルをまとめて相手に送ったりするために利用できる圧縮ツールは数多くあります。その中でも7-Zipは、高い圧縮性能と優れた圧縮率を完全無料で実現できることから、多くのユーザーに選ばれる定番ツールとなっています。 圧縮というと複雑な操作が必要そうに感じるかもしれませんが、フォルダとそのサブフォルダの中身をすべて1つのアーカイブにまとめたいだけであれば、話はぐっと簡単になります。そこで本記事では、Bashのエイリアス機能と7zのコマンドライン版を組み合わせて、シンプルなコマンド1つでファイルを圧縮パッケージ化する方法を紹介します。 p7zipをインストールする