2017-07-04 3 views
0

J'ai cherché une réponse concernant des commandes affectées à des variables dans shell mais sans succès. Mon script recherche un dossier nommé 2015may qui a un fichier 4444444.xml. La commande find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} + affiche la sortie suivante à l'aide de ces paramètres ["2015may", "44444444"]: path/filename_2015may.zip. Le problème est que cette commande renvoie '' en l'assignant à $command. Je pense que j'ai une erreur de syntaxe en l'assignant à $command. J'apprécierai votre aide pour résoudre ce problème.Affectation d'une commande à une variable contenant des chemins de fichier

Script

command=$(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +) 
echo "$command" 

sortie réelle

find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} + 
++ find /path/zipfolders -name '*2015may*' -exec grep -l 44444444 '{}' + 
+ command= 
+ echo '' 

de sortie désiré

path/filename_2015may.zip

+0

Vous n'avez pas besoin de 'zgrep' pour chercher dans les fichiers' zip'. – anubhava

Répondre

0

Pour affecter la sortie de la commande à une variable shell, placez la commande en arrière-guillemets (``). Donc, votre commande ressemblera à ceci:

command=`(find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +)` 
    echo $command 
+3

'$()' (utilisé dans la question) est généralement préféré sur les guillemets, à la fois parce qu'il est plus facile à lire et parce qu'il y a des bizarreries avec l'échappement (et l'imbrication) dans les guillemets. Voir [BashFAQ # 82] (http://mywiki.wooledge.org/BashFAQ/082). –