将命令分配给包含文件路径的变量
问题描述:
我一直在寻找一个有关命令分配给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
答
为了将命令输出分配给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)。 –
您是否需要'zgrep'来搜索'zip'文件。 – anubhava