URLのカール要求を実行するbashスクリプトがあります。すべてのカールヘッダーと情報は変数に含まれています。ここに簡単な例があります。
STRING="'http://www.mydomain.com/url' -H 'mydomain.com'"
私はもともとスクリプトがechoとxargsを介して渡すようにしましたが、これが良いアプローチではないかもしれないことを読み続けました。
「curl:(1)プロトコル「http」がlibcurlでサポートされていないか無効になっています」というカールエラーが発生するcurl $STRING
ように二重引用符を追加しようとしたときに問題が発生しました。curl "$STRING"
おそらく、引用符とスペースについて、ここで簡単なことを見落としていると思います。 (私は以前に一重引用符をエスケープしようとしましたが、文字通り文字列に追加しました)
$ STRINGをechoすると、すべての引用符と一重引用符で書かれたものが表示され、echo $STRING | xargs curl
入力時に文字列が乾燥して目的の操作を正確に実行します。
答え1
xargs
特に動作する場合、問題は何ですか?
シェルは拡張の結果ではなく引用符を削除します。つまり、二重引用符を削除した結果の一重引用符は削除されません。代わりに配列を使用してください。
args=('http://www.mydomain.com/url' -H 'mydomain.com')
curl "${args[@]}"
答え2
エラーが発生した単語の前に追加の引用符があるようです。httpこれにより発生する可能性があります。実行する前に、文字列をエコーして構文が正しいことを確認する必要があります。
"curl: (1) Protocol "'http" not supported or disabled in libcurl"
^