2017-07-04 3 views
0

Ich habe eine Antwort in Bezug auf Befehle gesucht, die Variablen in der Shell zugewiesen wurden, aber ohne Erfolg. Mein Skript sucht nach einem Ordner mit dem Namen 2015may, der eine Datei 4444444.xml enthält. Der Befehl find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} + zeigt unter Verwendung dieser Parameter die folgende Ausgabe an: ["2015may", "44444444"]: path/filename_2015may.zip. Das Problem ist, dass dieser Befehl '' zurückgibt, wenn er an $command übergeben wird. Ich denke, dass ich einen Syntaxfehler habe, wenn ich es zu $command assibning. Ich werde Ihre Hilfe bei der Lösung dieses Problems zu schätzen wissen.einen Befehl einer Variablen zuweisen, die Dateipfade enthält

Script

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

Tatsächliche Ausgabe

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

gewünschte Ausgabe

path/filename_2015may.zip

+0

Sie brauchen 'zgrep' nicht, um innerhalb der' zip'-Dateien zu suchen. – anubhava

Antwort

0

Um die Befehlsausgabe einer Shell-Variablen zuzuweisen, schließen Sie den Befehl in Backticks (``) ein. Ihr Befehl sieht also folgendermaßen aus:

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

'$()' (in der Frage verwendet) wird im Allgemeinen gegenüber Backticks bevorzugt, sowohl weil es leichter zu lesen ist, als auch weil es einige Kuriositäten gibt, innerhalb von Backticks zu entkommen (und zu verschachteln). Siehe [BashFAQ # 82] (http://mywiki.wooledge.org/BashFAQ/082). –

Verwandte Themen