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

シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】

今回は、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を始めとするシェルスクリプトを記述する際には、空文字には要注意です。

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

Blog TOP  シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ

bashの使い方 - もくじ

bashの使い方 - もくじ

シェルとは

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

条件式

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

文字列操作

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

繰り返し

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

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

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

実行権限

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

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