修正:パイプコマンドで「!」が正しく処理されない問題を解決
原文(日本語に翻訳)
パイプコマンドで ! が壊れる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ツール経由では誤って処理されていました