有効なコマンドの結果を bash 変数としてエクスポート中にエラーが発生しました。

有効なコマンドの結果を bash 変数としてエクスポート中にエラーが発生しました。

コマンドラインの結果を環境変数にエクスポートしようとしています。これが私がする方法です:

group_id=$(aws ec2 describe-security-groups --filters Name=group-name,Values=${group_name} \
  | jq '.["SecurityGroups"][0].GroupId' \
  | sed -e 's/^"//'  -e 's/"$//'
)

ただし、bashファイルを実行すると、次のエラーが発生します。

Error parsing parameter '--filters': Expected: '=', received: 'EOF' for input:

 ^

コマンドラインから直接試すと機能するため、コマンドは機能します。set -exvこの bash ファイルの上部で使用すると、ファイルの内容を取得します。

+ case $1 in
+ init
aws ec2 describe-security-groups --filters Name=group-name,Values=${group_name} \
++ aws ec2 describe-security-groups --filters Name=group-name,Values=docker-networking ' '

Error parsing parameter '--filters': Expected: '=', received: 'EOF' for input:

 ^
+ group_id=

なぜこのエラーが発生するのかご存知ですか?

答え1

バックスラッシュの後にスペースがあるようです。複数行コマンドを生成するには、バックスラッシュがその行の最後の文字でなければなりません。

次の出力から派生したset -xv

++ aws ec2 describe-security-groups --filters Name=group-name,Values=docker-networking ' '
                                                                              here ->  ~~~

関連情報