2011-10-30 17 views
3

J'ai une question concernant l'utilisation des fonctions dans une commande dans bash. getRegex est ma fonction, elle est définie à la fin du fichier. La commande que je veux utiliser est la suivante:Bash appeler une fonction dans une commande

COUNT=`grep -rnE 'getRegex' $HOME/new` 

Maintenant, j'ai essayé beaucoup de différentes variantes mais je ne peux pas le faire fonctionner, même si je l'ai divisé en 2. La méthode fonctionne correctement si je l'appelle la manière suivante: getRegex. Une idée de ce qui me manque? TIA

Répondre

3

Les mots clés pour répondre sont "bash command substitution", que vous pourriez trouver dans man bash ou Google. D'ailleurs, les guillemets sont vraiment importants ici.

#!/bin/bash 

function my_func() { 
    echo "no" 
} 

string="no you don't 
no you don't 
no you don't 
no you don't 
no you don't" 


COUNT="$(echo "${string}" | grep "$(my_func)" -c)" 
echo "${COUNT}" 

Et

$> ./ok.sh 
5 
0

Si vous essayez d'appeler une commande bash dans une autre commande bash, la commande interne (ici getRegex) doit être incluse dans les guillemets `` sinon elle sera interprétée comme du texte. Puisque vous auriez des backticks à l'intérieur des backticks, vous aurez besoin d'échapper à l'intérieur. Essayez ceci:

COUNT=`grep -rnE '\`getRegex\`' $HOME/new` 

Mais, à travers les merveilles de POSIX, nous pouvons utiliser une syntaxe différente. Partout où vous utilisez backticks, vous pouvez également utiliser $(). Donc, pour éviter émèse backslash, vous pouvez écrire:

COUNT=$(grep -rnE '$(getRegex)' $HOME/new) 
+0

Merci pour votre réponse, mais: 'count = $ (grep -rnE '$ (getRegex)' $ HOME/nouvelles)' retourne: 'la ligne 10: getRegex: command not trouvé'. – user1020822

+0

@Dan, avez-vous vérifié ce que votre code est vraiment fait? Êtes-vous sûr de guillemets simples dans le deuxième exemple? –

+0

dmalikov est, bien sûr, correct, il doit s'agir de guillemets doubles, car les guillemets simples dans bash ne développent pas les variables. – Dan

Questions connexes