将命令分配给包含文件路径的变量

问题描述:

我一直在寻找一个有关命令分配给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

为了将命令输出分配给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)。 –