3

実行するスクリプトがありますcurl-H文字列が空でない場合、オプションでパラメーターを追加できるようにしたい。複雑なのは、引用符とスペースのレベルです。

caption="Test Caption"

if [ "${caption}" != "" ]; then 
    CAPT=-H "X-Caption: ${caption}"
fi

curl -A "$UA" -H "Content-MD5: $MD5" -H "X-SessionID: $SID" -H "X-Version: 1"  $CAPT http://upload.example.com/$FN

アイデアは、CAPT 変数が空であるか、他のものと同じ形式で目的の -H ヘッダーが含まれているということです。-H "X-Caption: Test Caption"

問題は、実行時に割り当てを実行するコマンドとして解釈することです。

$bash -x -v test.sh
+ '[' 'Test caption' '!=' '' ']'
+ CAPT=-H
+ 'X-Caption: Test caption'
./test.sh: line 273: X-Caption: Test caption: command not found

コードの前に IFS をリセットしようとしましたが、違いはありませんでした。

4

3 に答える 3

8

これを機能させるための鍵は、配列を使用することです。

caption="Test Caption"

if [[ $caption ]]; then 
    CAPT=(-H "X-Caption: $caption")
fi

curl -A "$UA" -H "Content-MD5: $MD5" -H "X-SessionID: $SID" -H "X-Version: 1"  "${CAPT[@]}" "http://upload.example.com/$FN"
于 2012-05-21T01:26:52.510 に答える
2

キャプションがそこにあるかどうかだけを知る必要がある場合は、そこにある必要があるときにそれを補間することができます。

caption="Test Caption"
NOCAPT="yeah, sort of, that would be nice"

if [ "${caption}" != "" ]; then 
    unset NOCAPT
fi

curl ${NOCAPT--H "X-Caption: ${caption}"} -A "$UA" ...

要約すると、構文${var-value}valueifvarが設定されていない場合に生成されます。

于 2012-05-21T04:31:25.490 に答える
-1

私はついにそれを機能させました。問題の一部は に固有のものです。オプションをcurl使用してカスタム ヘッダーを設定する場合、 の後のすべて(つまり、カスタム ヘッダーの名前と値の両方) が一重引用符で保護されている場合に最適に機能するように見えます。次に、構築された文字列を渡して機能させる必要がありました。-H-Heval

これを読みやすくするために、単一引用符を という名前の変数に格納しますTICK

例:

TICK=\'
#
HDRS=""
HDRS+=" -H ${TICK}Content-MD5: ${MD5}${TICK}"
HDRS+=" -H ${TICK}X-SessionID: ${SID}${TICK}"
HDRS+=" -H ${TICK}X-Version: 1.1.1${TICK}"
HDRS+=" -H ${TICK}X-ResponseType: REST${TICK}"
HDRS+=" -H ${TICK}X-ID: ${ID}${TICK}"

if [ "${IPTC[1]}" != "" ]; then
    HDRS+=" -H ${TICK}X-Caption: ${IPTC[1]}${TICK}"
fi
if [ "${IPTC[2]}" != "" ]; then
    HDRS+=" -H ${TICK}X-Keywords: ${IPTC[2]}${TICK}"
fi

#
# Set curl flags
#
CURLFLAGS=""
CURLFLAGS+=" --cookie $COOKIES --cookie-jar $COOKIES"
CURLFLAGS+=" -A \"$UA\" -T ${TICK}${the_file}${TICK} "

eval curl $CURLFLAGS $HDRS -o $OUT http://upload.example.com/$FN
于 2014-04-22T01:17:06.690 に答える