Команда, которую вы хотите выполнить, выглядит примерно так:
curl -X POST --header "$H1" --header "$H2" --header "$H3" -d @s_100mb.xml "$URL"
(я буду использовать -H
вместо --header
, поскольку оно короче.)
Самый простой способ сделать это -
response=$(curl -X POST -H "$H1" -H "$H2" -H "$H3" -d @s_100mb.xml "$URL")
Проблема с вашим решением состоит в том, что вы вообще не разделяете значения заголовка:
curl -X POST -H $H1
Если содержимое H1
равно foo: bar
, то оно будет расширено до
curl -X POST -H foo bar
и это будет интерпретироваться как
curl -X POST -H (foo:) bar
(использование (
и )
только для иллюстрации приоритета, ничего подобного не работает в оболочке), т.е. bar
будет считаться первым позиционным аргументом, который является именем хоста, что приводит к странным ошибкам вы видите.
То, что вы хотите, это
curl -X POST -H (foo: bar)
, что может быть достигнуто путем правильной упаковки расширений в кавычки, как показано выше.
Также, вы должны предпочесть $ (cmd) вместо `cmd` .
В качестве последнего совета, если вы изучаете, как использовать оболочку, возможно, стоит избегать многократных расширений, т.е. не сохраняйте вашу команду в переменной CMD
, чтобы $($CMD)
ее позже, так как это приводит к множественным расширениям в нескольких местах (первое, где был назначен CMD
, второе, когда CMD
было развернуто в подоболочке $(...)
), что затрудняет понимание того, что происходит, черт возьми.