Seu problema é principalmente com os sinalizadores -F
na string $final_paths
. Está sendo passado um único argumento para curl
. A solução é não para citar a expansão da variável para confiar no shell que divide a string corretamente.
Quando você tem uma lista de coisas que você precisa passar para um programa como itens separados , use uma matriz:
#!/bin/bash
url='http://localhost:4502'
url+='/content/test/events/whats-on/all-about-women-home/2018/wine-tasting/jcr:content'
tag_paths=(
'/content/cq:tags/sales-stage/pre-sale'
'/content/cq:tags/sales-stage/special-offer'
)
curl_opts=( --user "admin:admin" --form "tags3@TypeHint=String[]" )
for tag_path in "${tag_paths[@]}"; do
curl_opts+=( --form "tags2=$tag_path" )
done
curl "${curl_opts[@]}" "$url"
Aqui, colocamos as opções para passar para curl
na matriz curl_opts
. Iniciamos essa matriz com as coisas que sabemos que sempre estarão lá e, em seguida, adicionamos as opções de caminho da tag, iterando sobre a matriz tag_paths
.
A expansão com aspas duplas "${curl_opts[@]}"
no final será expandida para todos os elementos da matriz curl_opts
, com cada elemento citado individualmente.
Eu também escolhi construir o URL completo no começo, pois é estático, e estou usando a longa opção para curl
, pois este é um script e podemos nos dar ao luxo de ser um pouco mais detalhado por uma questão de legibilidade).
Fazendo desta maneira, a cotação torna-se intuitiva e você não precisa se preocupar com a análise de listas separadas por vírgulas, com caracteres especiais de escape ou com a configuração de IFS
para algum valor não padrão.
O mesmo script, mas para /bin/sh
:
#!/bin/sh
url='http://localhost:4502'
url="$url/content/test/events/whats-on/all-about-women-home/2018/wine-tasting/jcr:content"
set -- \
'/content/cq:tags/sales-stage/pre-sale' \
'/content/cq:tags/sales-stage/special-offer'
for tag_path do
set -- "$@" --form "tags2=$tag_path"
shift
done
set -- --user "admin:admin" --form "tags3@TypeHint=String[]" "$@"
curl "$@" "$url"
Aqui, estamos restritos a usar apenas uma matriz, $@
. Os elementos são configurados nessa matriz com set
.