Skip to content

修正:パイプコマンドで「!」が正しく処理されない問題を解決

原文(日本語に翻訳)

パイプコマンドで ! が壊れるBashツールのバグを修正(例: jq 'select(.x != .y)' が正しく動作するようになりました)

原文(英語)

Fixed Bash tool mangling ! in piped commands (e.g., jq 'select(.x != .y)' now works correctly)

概要

Claude Code v2.1.75で、Bashツールがパイプを含むコマンドで ! 文字を誤って処理するバグが修正されました。この問題は jq!= 演算子や、! を含む複雑なパイプコマンドに影響していました。修正後は、jq 'select(.x != .y)' のようなコマンドが正しく実行されます。

基本的な使い方

修正後は、! を含むパイプコマンドをそのまま実行できます:

bash
# jqで != 演算子を使ったフィルタリング(修正後は正常動作)
cat data.json | jq 'select(.status != "inactive")'

# 複数条件のフィルタリング
cat users.json | jq 'select(.age >= 18 and .verified != false)'

実践例

JSONデータのフィルタリング

bash
# エラーでないレコードを抽出
cat logs.json | jq '.[] | select(.level != "error")'

# 特定のフィールドが存在しないレコードを抽出
cat data.json | jq '.[] | select(.deleted != true)'

# 複数のフィールドで条件フィルタリング
cat users.json | jq '.[] | select(.role != "admin" and .active != false)'

APIレスポンスの処理

bash
# 非アクティブなサービスを除外してリスト表示
curl -s https://api.example.com/services | \
  jq '.services[] | select(.status != "disabled") | .name'

# 特定タグを持たないリソースを抽出
aws ec2 describe-instances | \
  jq '.Reservations[].Instances[] | select(.Tags[]?.Key != "Environment")'

ログ解析での活用

bash
# 成功以外のHTTPステータスコードを抽出
cat access.log | jq -R 'split(" ") | select(.[8] != "200")'

# エラーレベルでないログエントリを表示
cat application.log | jq 'select(.severity != "ERROR" and .severity != "CRITICAL")'

注意点

  • 対象バージョン: v2.1.75で修正されました。旧バージョンでは ! を含むパイプコマンドが意図しない動作をする場合がありました
  • jqの !=演算子: 最も影響を受けていた jq 'select(.field != value)' 形式のコマンドが正しく動作するようになりました
  • シェルのヒストリー展開: この修正はBashのヒストリー展開機能(! を特別に解釈する機能)との干渉に関するものです。一般的なBash環境では問題ないコマンドが、Bashツール経由では誤って処理されていました

関連情報