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

シェル/bash

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

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

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

本記事の内容

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

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

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

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

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

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

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

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

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

具体例

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

 
str1="文字列1"
str2="文字列2"
[ "$str1" = "$str2" ] && echo "同じ文字列です" || echo "異なる文字列です"
 

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

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

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

具体例

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

 
str1="string"
str2="string"
if [ "$str1" = "$str2" ]; then
 echo "同じ文字列です"
else
 echo "異なる文字列です"
fi
 

比較演算子

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

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

ターミナルを開いて実行してみましょう。

$ [ "ABC" = "ABC" ] && echo "True" || echo "False"
True
$ [ "ABC" != "ABC" ] && echo "True" || echo "False"
False
$ [ -n "ABC" ] && echo "True" || echo "False"
True
$ [ -z "" ] && echo "True" || echo "False"
True

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

文字列比較に使う変数は、ダブルクォートで囲みましょう

良い例

if [ "$str1" = "$str2" ]; then

悪い例

if [ $str1 = $str2 ]; then

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

こんなエラーが出ます

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

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

bashの使い方 - もくじ

bashの使い方 - もくじ

シェルとは

 - シェルとは
 - シェルはOSと会話するための言語
 - シェルの種類(bash以外のシェル)
 - シェルスクリプトとは
 - シェルスクリプトの書き方

条件式

 - if else文
 - 文字列の比較
 - &&と||の使い方
 - case文

文字列操作

 - 文字列の連結
 - 文字列の一部を切り出す

繰り返し

 - for文
 - while文
 - while文でリストから1つ要素ずつ処理する

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

 - デバッグオプション(-x)

実行権限

 - 実行権限のないシェルスクリプトファイルを実行する

 - シェルスクリプトの書籍3選


今、ITエンジニアは前例のない売り手市場です

ITエンジニアは前例のない売り手市場、転職なら今

現在のエンジニアの求人数と求人倍率をご存知ですか?

直近(※)のIT業界全体の求人倍率は7.85倍です。

つまり 企業が8回 IT人材の求人を出しても、 1人しかエントリーがない 状況です。

エンジニア側が企業を選ぶ なら、今がチャンスです。

※転職サイトdodaが毎月発表している転職求人倍率。
 2019年12月9日発表/集計対象期間は2019年11月1日〜30日

詳しくはこちら


人気記事【今年の抱負】退職しオープン&フリー&シンプルに生きていく【失敗しない働き方改革の本質】