262 votes

Variable de bash de passage à jq sélectionner

J'ai écrit un script pour récupérer une certaine valeur de . Il fonctionne si je fournis la valeur à jq , mais la variable ne semble pas fonctionner (ou je ne sais pas comment l'utiliser).

391voto

peak Points 71

Envisagez également de passer dans la variable shell (EMAILID) comme une variable jq (ici aussi EMAILID, pour des raisons d'illustration):

post-scriptum

Pour mémoire, une autre possibilité serait d'utiliser la fonction de jq `` pour accéder aux variables de l'environnement. Par exemple, considérez cette séquence de commandes de bash :

La sortie est une chaîne JSON :

56voto

asidd Points 218

J'ai résolu ce problème en échappant aux doubles citations intérieures

20voto

sputnick Points 31663

C'est une citation problème, vous devez :

projectID=$(
  cat file.json | jq -r ".resource[] | select(.username=='$EMAILID') | .id"
)

Si vous mettez des guillemets simples pour délimiter la chaîne principale, le shell prend $EMAILID littéralement.

"Double quote" chaque littéral qui contient des espaces et des caractères de remplacement et chaque extension: "$var", "$(command "$var")", "${array[@]}", "a & b". Utiliser 'single quotes' pour le code ou littéral $'s: 'Costs $5 US', ssh host 'echo "$HOSTNAME"'. Voir
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

8voto

Andrew Lockhart Points 84

Une autre façon d'y parvenir est avec le drapeau jq "--arg". En utilisant l'exemple original :

Voir ici, qui est l'endroit où j'ai trouvé cette solution: https://github.com/stedolan/jq/issues/626

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X