プログラマーな日々

プログラマーをやっています。好きなものは、C#, TaskChute Cloud, WorkFlowy, Backlog, AWSです。

【Powershell】jqで「XXX/0 is not defined at <top-level>」のエラーが発生する

bashだと以下のjqコマンドは期待通りに動作します。

$ echo '{"items":[{"id":1,"name":"foo"},{"id":2,"name":"bar"}]}' | jq '.items[] | select(.name == "bar") | .name'
"bar"

Powershellで同じコマンドを実行するとエラーになります。

$ echo '{"items":[{"id":1,"name":"foo"},{"id":2,"name":"bar"}]}' | jq '.items[] | select(.name == "bar") | .name'
jq : jq: error: bar/0 is not defined at <top-level>, line 1:
発生場所 行:15 文字:66
+ ... ":2,"name":"bar"}]}' | jq '.items[] | select(.name == "bar") | .name'
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (jq: error: bar/...level>, line 1::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
.items[] | select(.name == bar) | .name                           
jq: 1 compile error

エラーメッセージをみると、.name == "bar"のダブルクォーテーションが認識されていないようです。エスケープすると期待通りに動作しました。

echo '{"items":[{"id":1,"name":"foo"},{"id":2,"name":"bar"}]}' | jq '.items[] | select(.name == \"bar\") | .name'
"bar"