変数にJSON文字列が入ってる状態でコマンドの引数に渡したい


特定のセキュリティグループについてるインバウンドルールを全て削除したい  
（正確には置き換えたいのでそのためにまず削除したい）

[code]

    OLD_RULES=`aws ec2 describe-security-groups | jq '.SecurityGroups[] | select(.GroupName=="xxxxx") | .IpPermissions'`
    
    aws ec2 revoke-security-group-ingress \
    --group-name xxxxx \
    --ip-permissions $OLD_RULES
    
[/code]

上記のようなスクリプトを書いたのですが文法エラーになってしまいます  
$OLD_RULES の中身を１つの引数として渡すにはどう書けばいいのでしょうか

[code]

    aws ec2 revoke-security-group-ingress \
    --group-name xxxxx \
    --ip-permissions '{...}'
    
[/code]

のようにJSONの中身を直接書けば実行できますが

[code]

    aws ec2 revoke-security-group-ingress \
    --group-name xxxxx \
    --ip-permissions '$OLD_RULES'
    
[/code]

と書いてしまうと当然変数が展開されません




$OLD_RULESを二重引用符で囲んではいかがでしょうか。一重引用符`'`とは異なり、変数の内容を展開してくれます。

[code]

    --ip-permissions "$OLD_RULES"
    
[/code]

* * *
[code]

    --ip-permissions $OLD_RULES
    
[/code]

では、$OLD_RULESに空白が含まれていると、空白までの文字列が`--ip-permissions`に渡されてしまいます。

[code]

    --ip-permissions '$OLD_RULES'
    
[/code]

では、質問にも書かれているとおり、`$OLD_RULES`という文字列そのもが`--ip-
permissions`に渡されてしまい、変数の内容が展開されません。




$OLD_RULESを二重引用符で囲んではいかがでしょうか。一重引用符`'`とは異なり、変数の内容を展開してくれます。

[code]

    --ip-permissions "$OLD_RULES"
    
[/code]

* * *
[code]

    --ip-permissions $OLD_RULES
    
[/code]

では、$OLD_RULESに空白が含まれていると、空白までの文字列が`--ip-permissions`に渡されてしまいます。

[code]

    --ip-permissions '$OLD_RULES'
    
[/code]

では、質問にも書かれているとおり、`$OLD_RULES`という文字列そのもが`--ip-
permissions`に渡されてしまい、変数の内容が展開されません。

