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/BusyBoxashでは使えないことがあります。 - 引用(クォート):POSIXの
[ ]では変数を常に二重引用("$var")してください。未定義・空・空白入りでも安全に比較できます。 - 整数限定:
-ne/(( ))は整数専用です。小数や非数値はエラー。文字列比較に流用しないこと。 - 終了ステータス:条件式の真偽は終了コードで表現(真=0、偽=1、評価エラー=2)。
if ...; thenで自然に扱えます。 - Windowsの
NEQ:WindowsバッチのNEQと混同しないでください。Linux/Unixシェルには同名コマンドはありません。
参考
- POSIX
test仕様([,test, 文字列/整数比較)
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html - Bash Reference Manual(Conditional Constructs /
[[ ]], Arithmetic Evaluation /(( )))
https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html
https://www.gnu.org/software/bash/manual/html_node/Arithmetic-Expansion.html test(1)マンページ
https://man7.org/linux/man-pages/man1/test.1.htmlexpr(1)(比較演算の参考)
https://man7.org/linux/man-pages/man1/expr.1.html

コメント