ヒアドキュメントで指定した改行を含むコマンド文字列を実行したい


curl のパラメータを少しだけ変えたリクエストを何度も送りたいので  
共通のコマンド文字列を定義して変更する部分だけ文字列を連結して実行したいです

具体的には

[code]

    curl https://xxxxx
    -d 'abc=xxxxxxxx'
    -d 'def=xxxxxxxx'
    -d 'ghi=xxxxxxxx'
    -d 'jkl=xxxxxxxx'
      :
    
[/code]

と言う20個ぐらいのパラメータの後

[code]

    -d 'xyz=xxxxxxx'
    
[/code]

と言うパラメータだけ変更して curl を叩くと言うスクリプトを書きたいです

なので前半部分を文字列変数(例えば$COMMAND)で定義しておいて

[code]

    $COMMAND -d 'xyz=xxxxxxx'
    $COMMAND -d 'xyz=yyyyyyy'
    $COMMAND -d 'xyz=zzzzzzz'
    
[/code]

みたいにかけるとスクリプトが見やすくなるかなと思っています

ただ前半のコマンドパラメータが量が多いのでできれば１行ずつ別の行に書きたくて  
パラメータの中に ' も " も使ってたりしてエスケープが大変なので  
ヒアドキュメントを使ってかけるといいかなと思っています

そこで以下のような ls と -l を別の行に書いて後から引数を追加して実行するような  
テストコードを書いてみたんですがうまく行きません

[code]

    COMMAND=<<EOS
    ls \
    -l
    EOS
    
    echo $COMMAND # デバッグ用　何も出力されない
    $($COMMAND ~) # ls -l ~ が実行されて欲しい
    
[/code]

ヒアドキュメントなしで

[code]

    COMMAND='ls -l'
    echo $COMMAND # ls -l が表示される
    $($COMMAND ~)
    
[/code]

と書いてみても

[code]

    ls -l
    test.sh: line 3: total: command not found
    
[/code]

となってしまいます

どうすればやりたいことができるでしょうか




bash のヒアドキュメントは文字列リテラルではなく標準入力として扱われます。  
そのため記載されたソースでは 変数 COMMAND に格納しているつもりかと思いますが COMMAND には何も格納されません。

エスケープが大変さがどの程度のものかわかりませんが、共通処理化したいのであればふつうに関数化するのはいかがでしょうか？

[code]

    myls()
    {
        ls \
         -l \
          "$@" ;
    }
    
    myls ~ 
    myls /
    
[/code]




bash のヒアドキュメントは文字列リテラルではなく標準入力として扱われます。  
そのため記載されたソースでは 変数 COMMAND に格納しているつもりかと思いますが COMMAND には何も格納されません。

エスケープが大変さがどの程度のものかわかりませんが、共通処理化したいのであればふつうに関数化するのはいかがでしょうか？

[code]

    myls()
    {
        ls \
         -l \
          "$@" ;
    }
    
    myls ~ 
    myls /
    
[/code]

