neq – 不等比較(not equal)を行うシェルの演算子まとめ

差分・比較

neq という外部コマンドは存在しません。本記事では「不等比較(not equal)」を表す各シェルの演算子・記法([ ]/test/[[ ]]/(( ))/expr など)を実務で迷わないように整理します。
実務では、引数チェックや分岐(値が一致しない時のエラー処理・早期終了など)で頻繁に使います。

構文(Syntax)

# 文字列の不等比較(POSIX)
[ STRING1 != STRING2 ]          # または: test STRING1 != STRING2

# 文字列の不等比較(bash/zsh 拡張: パターン比較)
[[ STRING1 != PATTERN ]]

# 数値の不等比較(POSIX)
[ INT1 -ne INT2 ]

# 数値の不等比較(bash/ksh の算術評価)
(( INT1 != INT2 ))

# expr を用いた不等比較(外部コマンド)
expr STRING1 != STRING2
expr INT1 != INT2
  • [[ ... ]] は bash/zsh の拡張で、右辺にグロブパターン(*.log など)を使えます。
  • (( ... ))整数算術専用です。小数や非数値はエラーになります。
  • 変数は空や空白を含む場合もあるため、POSIXの [ ] では必ず引用して比較します:[ "$a" != "$b" ]

主なオプション一覧

コマンドのオプションではなく、**代表的な「不等比較の書式」**を一覧化しています。

オプション説明使用例
!=(文字列)文字列が異なるか[ "$USER" != "root" ]
-ne(数値)整数が異なるか[ "$COUNT" -ne 0 ]
[[ ... != ... ]]bash/zshの拡張。右辺にパターン可[[ $file != *.log ]]
(( ... != ... ))算術評価(整数限定)(( retries != 3 ))
expr A != B外部コマンド。真なら1、偽なら0を返すexpr "$x" != "$y"

実行例

文字列が異なる場合に処理を分岐

説明:ユーザー名が root でない場合に警告します(POSIX互換)。
コマンド

if [ "$USER" != "root" ]; then
  echo "注意: root ではありません"
fi

出力例(一例)

注意: root ではありません

数値の不等比較で終了コードを使う

説明:カウントが0でなければエラー終了します。
コマンド

count=5
if [ "$count" -ne 0 ]; then
  echo "未処理アイテム: $count" >&2
  exit 1
fi

出力例

未処理アイテム: 5

bash拡張:パターンでの不等比較

説明.log 以外のファイルだけ処理します([[ ]] はパターン解釈)。
コマンド

file="report.txt"
if [[ $file != *.log ]]; then
  echo "ログ以外のファイルです: $file"
fi

出力例

ログ以外のファイルです: report.txt

算術評価:整数の不等比較(高速・厳格)

説明:再試行回数が既定値と異なる時にメッセージ。
コマンド

retries=2
if (( retries != 3 )); then
  echo "リトライ回数が既定と異なります"
fi

出力例

リトライ回数が既定と異なります

エラー例:数値比較に非数値を渡す

説明-ne(( )) は整数前提。非数値はエラーになります(bashの例)。
コマンド

x="abc"
[ "$x" -ne 1 ]        # または: (( x != 1 ))
echo $?

出力例(一例)

bash: [: abc: integer expression expected
2

関連コマンド

  • test / [:POSIXの条件式評価コマンド。文字列・数値比較やファイルテストを提供。
  • [[ ]]:bash/zsh拡張の条件式。パターンや正規表現(=~)をサポート。
  • (( )):bash/kshの算術評価。整数演算と比較に最適。
  • expr:外部コマンドで式を評価(歴史的互換のための選択肢)。
  • case:パターンに基づく分岐。[[ $x != pattern ]] と同様の用途をより可読に書ける場合あり。

備考

  • 移植性:最も可搬なのは [/test!=(文字列)と -ne(数値)。[[ ]]/(( )) は POSIX ではなく、dash/BusyBox ash では使えないことがあります。
  • 引用(クォート):POSIXの [ ] では変数を常に二重引用"$var")してください。未定義・空・空白入りでも安全に比較できます。
  • 整数限定-ne/(( )) は整数専用です。小数や非数値はエラー。文字列比較に流用しないこと。
  • 終了ステータス:条件式の真偽は終了コードで表現(真=0、偽=1、評価エラー=2)。if ...; then で自然に扱えます。
  • Windowsの NEQ:Windowsバッチの NEQ と混同しないでください。Linux/Unixシェルには同名コマンドはありません。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント