2009-12-02 5 views
2

J'écris un script qui essaie d'insérer un nom de répertoire dans une commande pax et je ne suis pas sûr de savoir comment corriger la syntaxe. C'est ce que j'essaie, mais il semble que le $ DIRNAME soit traité comme faisant partie de la chaîne regex.Comment insérer une variable de script dans une chaîne regex?

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s'/$DIRNAME\/upload\///' 

Merci!

Répondre

4

Essayez d'utiliser des guillemets doubles plutôt que des guillemets simples lorsque vous appelez pax:

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s"/$DIRNAME\/upload\///" 

Dans plusieurs coquilles (par exemple bash et sh), les variables $ s'élargir seulement quand ils se produisent dans les chaînes entre guillemets, pas simple cordes citées.


Par ex, le script suivant:

#!/bin/sh 

DIRNAME=$(echo 'hello') 
echo "Single quotes around regexp:" 
echo 'hello world' | sed 's/$DIRNAME/hi/' 

echo "Double quotes around regexp:" 
echo 'hello world' | sed "s/$DIRNAME/hi/" 

affiche le résultat:

Single quotes around regexp: 
hello world 
Double quotes around regexp: 
hi world 
+0

qui ne fonctionne pas. Le problème est que $ DIRNAME ne fait pas écho au contenu de DIRNAME, mais insère simplement la chaîne de texte $ DIRNAME elle-même dans la chaîne regex. – user77413

+0

Sur quel shell le script est-il exécuté? frapper? tcsh? –

+0

Désolé, je l'ai encore essayé et l'erreur que j'ai eu était avec la commande pax, pas le $ DIRNAME une fois que je l'ai doublé. J'utilise bash. – user77413

Questions connexes