Bash 将命令指定给包含文件路径的变量

Bash 将命令指定给包含文件路径的变量,bash,shell,command,variable-assignment,Bash,Shell,Command,Variable Assignment,我一直在寻找一个关于在shell中分配给变量的命令的答案,但没有成功。我的脚本查找名为2015may的文件夹,该文件夹包含一个文件444.xml。命令find/path/zipfolders-name“*${array[$((i+1))]}*”-exec grep-l“${array[$i]}”{}+使用这些参数显示以下输出[“2015may”,“44444444”:路径/文件名\u 2015may.zip。问题是,当将该命令分配给$command时,该命令返回'。我想我在将它分配到$comma

我一直在寻找一个关于在shell中分配给变量的命令的答案,但没有成功。我的脚本查找名为
2015may
的文件夹,该文件夹包含一个文件
444.xml
。命令
find/path/zipfolders-name“*${array[$((i+1))]}*”-exec grep-l“${array[$i]}”{}+
使用这些参数显示以下输出[
“2015may”
“44444444”
路径/文件名\u 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 ''
实际产出

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 ''
所需输出

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\u 2015may.zip
要将命令输出分配给shell变量,请将命令括在反勾(``)中。因此,您的命令将如下所示:

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

你不需要
zgrep
来搜索
zip
文件吗。
$()
(在问题中使用)通常比backticks更受欢迎,因为它更容易阅读,而且backticks内部的转义(和嵌套)也有一些奇怪之处。看见