【bash】文字列の比較について解説します【超簡単です】

シェル/bash

bashの文字列比較について調べる人

bashの文字列比較について調べる人
「bashで文字列比較をしたいのですが、どうやって書くのか忘れてしまったので教えてください。コピペできるソースコード例も欲しいです。」

こんな悩みを解決します。

本記事の内容

  • 1行で文字列同士の比較をする方法
  • if〜else文を使って文字列比較する方法
  • 【重要】文字列を扱う変数は、ダブルクォートで囲みましょう

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやCygwin、mac、Linuxなど様々な環境でbashによるスクリプティングを行ってきました。

bashは極めて簡単なプログラミング言語ですが、空白の有無などで構文エラーとなること、javaなど一般的なプログラミング言語に慣れている方にとっては直感的ではない構文であることから、忘れてしまうことも多いかと思います。

あと、Qiitaとかに入門者が書いたメモの記事ですと、構文が間違っているケースがあり、少し複雑な文字列の処理ですとエラーとなってしまう書き方も散見されますので、正しい情報を発信したいと思い、記事にしました。

また本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。

1行で文字列同士の比較をする方法

1行で文字列同士の比較をする方法

bashなら、わずか1行で比較が可能

文字列の比較なら、if〜else文を使わなくても、これで十分です。

[ 《条件文》 ] && 《コマンド1》 || 《コマンド2》

具体例

例:文字列同士を比較した結果に応じたコマンドを実行する

if〜else文を使って文字列比較する方法

if〜else文を使って文字列比較する方法

if [ 《条件文》 ]; then
《コマンド1》
else
《コマンド2》
fi

具体例

具体例として、以下に文字列同士(str1とstr2)を比較する例を示します。

比較演算子

文字列同士を比較する際に用いる比較演算子は以下の通りです。

演算子 意味
= 文字列同士が等しいか
!= 文字列同士が異なるか
-n 文字列の長さが1以上か
-z 文字列の長さが0か

【重要】文字列を扱う変数は、ダブルクォートで囲みましょう

if〜else文を使って文字列比較する方法

良い例

悪い例

「悪い例」では、str1またはstr2が空の文字列(“”)のとき、構文エラーとなってしまいます。シェルスクリプト特有のクセで、普通のプログラミング言語では起こりえない問題ですので注意が必要です。

こんなエラーが出ます

bash: [: str: unary operator expected
bashでは文字列が空だと、スクリプトの該当の箇所に「何も書いてないもの」と見なされて、構文エラーとなってしまうのです。ですからbashを始めとするシェルスクリプトを記述する際には、空文字には要注意です。

今回は以上です。参考になりましたら幸いです。