aws ec2コマンドでquery内の`でエラーが出た時のメモ

aws ec2コマンドを使用してシェルスクリプトからインスタンスの情報を取ったり、スナップショット取ったりを試していた。
その中で、queryオプションを使うと結果表示を絞れることに気付き(今更!)試していたのだが、バッククォートで躓いた。

この時はインスタンス自身から自分のタグNameに設定されている値を取ろうとしていた。

RET=`aws ec2 describe-instances --instance-ids ${MY_INSTANCE_ID} --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value'`

これ、実行すると下記のようなエラー出ます。

./test.sh: command substitution: line 88: unexpected EOF while looking for matching `''
./test.sh: command substitution: line 89: syntax error: unexpected end of file
./test.sh: command substitution: line 88: unexpected EOF while looking for matching `''
./test.sh: command substitution: line 89: syntax error: unexpected end of file

そこで、\でエスケープしてみた。

RET=`aws ec2 describe-instances --instance-ids ${MY_INSTANCE_ID} --query 'Reservations[].Instances[].Tags[?Key==\`Name\`].Value'`

結果は同じくエラーです。
深く考えず、\が足りないのかと思って複数並べてみたりしましたがエラーです!

で、最終的に下記で対応できました。

NAME=$(aws ec2 describe-instances --instance-ids ${MY_INSTANCE_ID} --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value')

$()の存在を忘れていました。

無事解決。


今回のお悩みポイント。

  • 最初、Nameはシングルクォートで囲まれているものだと思っていてaws側でエラー
  • よく見たら`だったが、今回のように2重になってエラー
  • エスケープ方法を調べようにもgoogle検索に"`"とか入れても検索条件に使われない
  • `の名前をネットで調べる("記号 読み方"で検索)→バッククォート!!

その後検索してもそのままの情報のサイトは見つからなかった。
bash関係のサイトを見ていた時に``と$()の違いを載せている方がいて、そっちがあったーーー!!となりました。

この件解決するまでに時間結構掛かっている…。
`で悩みすぎていたら、スクリプト内の変なところに意図せず挿入されていて更にエラーが出て悩んだっていうのもあるからね…。
老化を感じる…。