Concaténer des variables à un script Ssortingng bash

J’essaie de concaténer des variables avec des chaînes dans mon script bash, les variables sont lues indépendamment mais chaque fois que j’essaie de les concaténer, elles ne reconnaissent pas les valeurs des variables. ex-

echo $CONFIG_PROTOCOL (Prints the variable value, HTTP) echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf 

L’écho ci-dessus avec l’URL imprime /api/creations/objects/export?collection.ids=value_1, alors qu’il devrait imprimer http: // localhost: 8080 / api / creation / objects / export? Collection.ids = value_1

Toutes les entrées seront appréciées.

Cela se produit parce que $CONFIG_PORT a un retour chariot. Voici un MCVE :

 CONFIG_PROTOCOL="http" CONFIG_SERVER_SOURCE="example.com" CONFIG_PORT="8080" sf="42" # Introduce bug: CONFIG_PORT+=$'\r' echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf 

Une fois exécuté, ceci imprime:

 /api/creation/objects/export?collection.ids=42 

Lorsque vous commentez la ligne de buggy, vous obtenez:

 http://example.com:8080/api/creation/objects/export?collection.ids=42 

Dans les deux cas, echo apparaîtra pour montrer les valeurs correctes car echo est un outil pour montrer du texte aux humains et pas utile pour montrer les données sous-jacentes. printf '%q\n' "$CONFIG_PORT" affichera plutôt dans un format non ambigu:

 $ echo $CONFIG_PORT 8080 $ printf '%q\n' "$CONFIG_PORT" $'8080\r' 

La meilleure façon de résoudre ce problème est de s’assurer que tout ce que fournit la valeur le fait correctement. Mais le plus simple est de les dépouiller:

 echo $CONFIG_PROTOCOL'://'$CONFIG_SERVER_SOURCE:$CONFIG_PORT'/api/creation/objects/export?collection.ids='$sf | tr -d '\r' 
 echo "$CONFIG_PROTOCOL://$CONFIG_SERVER_SOURCE:$CONFIG_PORT/api/creation/objects/export?collection.ids=$sf" 

Essayez ci-dessus la déclaration d’écho