2017-07-04 114 views
0

我一直在尋找一個有關命令分配給shell中的變量但沒有成功的答案。我的腳本查找名爲2015may的文件夾,其文件爲4444444.xml。命令find /path/zipfolders -name "*${array[$((i+1))]}*" -exec grep -l "${array[$i]}" {} +使用這些參數["2015may","44444444"]顯示以下輸出:path/filename_2015may.zip。問題是這個命令在將其分配給$command時返回''。我認爲在將其分配到$command時,我的語法錯誤。我會感謝您解決此問題的幫助。將命令分配給包含文件路徑的變量

腳本

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

實際輸出

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

所需的輸出

path/filename_2015may.zip

+0

您是否需要'zgrep'來搜索'zip'文件。 – anubhava

回答

0

爲了將命令輸出分配給shell變量,請將該命令放入反引號(``)中。因此,您的命令將如下所示:

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

'$()'(在問題中使用)通常比反引號更受歡迎,因爲它更易於閱讀,並且因爲在反引號內部存在轉義(和嵌套)的一些特殊情況。參見[BashFAQ#82](http://mywiki.wooledge.org/BashFAQ/082)。 –