zshとbashは違う

jqを使った時に気づいた話

bashはデフォルトで.items[]をリテラルな文字列として扱います。

1
2
3
# bash
echo '{"items": ["a", "b", "c"]}' | jq -r .items[] | xargs echo
a b c

zshはデフォルトで、クォートされていない引数をグロブパターンとして扱おうとします。

1
2
3
# zsh
echo '{"items": ["a", "b", "c"]}' | jq -r .items[] | xargs echo
zsh: no matches found: .items[]

zshでこのコマンドを正しく動作させるには、.items[]をクォートで囲む必要があります。

1
2
echo '{"items": ["a", "b", "c"]}' | jq -r '.items[]' | xargs echo
a b c

shellcheckを使うと安心

Macのインストールは以下のコマンドです

1
brew install shellcheck