0
votes

Supprimer des citations doubles d'une corde à bash

J'essaie d'aller chercher un seul fichier de Git. Lorsque j'exécute ma commande git avec la valeur codée du code papier, cela fonctionne. Cependant, quand je l'exécute avec une variable, il se casse. Je soupçonne que cela est dû aux devis doubles placés autour de ma variable d'une manière ou d'une autre. J'ai essayé de nombreuses commandes de retirer les citations doubles de la chaîne et aucun d'entre eux ne semble fonctionner.

J'essaie essentiellement d'utiliser la variable FilePath dans ma commande git sans doubles citations autour de lui. P>

#!/usr/bin/env bash
 #reads the JSON value of the file-path key. 
 #file path key is "home/docs" (quotes included)
filePath=$(grep -o '"file-path": *"[^"]*"' ../package.json | grep -o '"[^"]*"$')
git archive --remote=git@git.SOME_URL.com:help/docs.git HEAD $filePath | tar -x


2 commentaires

Arrêtez d'utiliser grep pour analyser JSON. Utilisez un outil tel que JQ qui est conçu pour JSON et sait comment produire la chaîne brute que vous voulez. FilePath = $ (JQ -R '.FILE_PATH' ../ package.json) .


Le dernier grep grep -o '[^ "] *' . N'incluez pas les devis si vous n'en avez pas besoin


3 Réponses :


-1
votes

Ce qui suit fonctionnera:

filePath=$(grep -o '"file-path": *"[^"]*"' ./package.json | cut -d: -f2 | tr -d ' "')


0 commentaires

0
votes

Ceci fonctionne: xxx

donc dans votre cas: xxx

Vous devez citer la clé car elle contient un trait d'union. < / p>


0 commentaires

0
votes

J'ai rencontré le problème récemment que Bash ne supprime que des citations qui n'entraînaient pas d'une expansion variable. Donc, pour obtenir BASH pour supprimer des guillemets doubles dans une chaîne d'utilisation Eval Pour traiter la chaîne après l'expansion de la variable:

foo=\"abc\"\ \"def\"
echo $foo
"abc" "def"
eval echo $foo
abc def


0 commentaires