Как @goldilocks предложенный, вынимая двойные наклонные черты влево (\\
) и замена их с единственными обратными косыми чертами (\
) кажется, устраняет Вашу проблему. Вот пример вывода с модификациями:
$ ./curl.bash
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CalcPrimeFactorsResponse xmlns="http://www.mathertel.de/S01_AsyncSamples/">
<CalcPrimeFactorsResult>2 3 3 5 3607 3803</CalcPrimeFactorsResult>
</CalcPrimeFactorsResponse>
</soap:Body>
</soap:Envelope>
curl
обеспечивает следующую конструкцию, которая может использоваться для передачи опций в него:
#!/bin/bash
{ echo '--opt1'
echo '--opt2'
...
} | curl --config -
Таким образом, Вы могли адаптировать вышеупомянутое как так:
#!/bin/bash
ENDPOINT="http://mathertel.de/AJAXEngine/S01_AsyncSamples/CalcService.asmx"
VALUE=1234567890
if [ -n "${1}" ]; then
VALUE=${1}
fi
read -r -d '' DATA <<EOF
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<CalcPrimeFactors xmlns="http://www.mathertel.de/S01_AsyncSamples/">
<inputText>${VALUE}</inputText>
</CalcPrimeFactors>
</soap12:Body>
</soap12:Envelope>
EOF
{
echo '--silent'
echo '--header "Content-Type: application/soap+xml; charset=utf-8"'
echo '--user-agent ""'
echo "--url ${ENDPOINT}"
echo '--data-binary @-'
echo "$DATA"
} | curl --config - | xmllint --format -
Эта конструкция делает немного легче параметризовать $DATA
полезные нагрузки, таким образом, Вы могли перенести все curl
создайте в функции и просто передайте ее переменные для включения, например.
Вы ищете набор -x
:
set -x arm 'ARCH=arm CROSS_COMPILE=arm-eabi-'
Смотрите раздел , посвященный переменным окружения для более подробной информации.
.В sh
/bash
:
export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
make $arm
Не имеет смысла. Под переменными окружения понимаются переменные, переданные в make
(поэтому ссылка на $(arm) в Makefile, например, расширяется до его содержимого). Переменные среды являются скалярными, они могут содержать только одно строковое значение. Выше вы полагаетесь на оператор split+glob оболочки , который разбивает переменную на слова, переданные в make
(в качестве аргументов).
Но $arm
расширяется оболочкой, поэтому нет необходимости экспортировать arm
в среду make
, так как make
не использует эту переменную $arm
.
Кроме того, в оболочке, которая их поддерживает, имеет смысл использовать массивы. В bash
/zsh
/ksh
:
arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make "${arm[@]}"
С fish
:
set arm ARCH=arm CROSS_COMPILE=arm-eabi-
make $arm
С rc
/es
/zsh
:
arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make $arm