Bash 将for循环结果传递给VAR失败

Bash 将for循环结果传递给VAR失败,bash,Bash,我正在计算一个目录中包含的文件数,其中ZIP被丢弃 当我运行此命令时,echo$VAR稍后会发送到电子邮件 VAR=`for i in `find . -mtime 0 -name '*XML*' -exec ls '{}' \;`; do unzip -l "$i"| awk -F. '{if ($2=="XML") print $0}'|wc -l; done| paste -sd+ | bc` 它失败,出现以下错误: -bash: command substitution: line

我正在计算一个目录中包含的文件数,其中ZIP被丢弃

当我运行此命令时,
echo$VAR
稍后会发送到电子邮件

 VAR=`for i in `find . -mtime 0 -name '*XML*' -exec ls '{}' \;`; do unzip -l "$i"| awk -F. '{if ($2=="XML") print $0}'|wc -l; done| paste -sd+ | bc`
它失败,出现以下错误:

-bash: command substitution: line 1: syntax error near unexpected token `;'
-bash: command substitution: line 1: `; do unzip -l "$i"| awk -F. '{if ($2=="XML") print $0}'|wc -l; done| paste -sd+ | bc'
-bash: command substitution: line 2: syntax error: unexpected end of file
-bash: .: -m: invalid option
.: usage: . filename [arguments]
就其本身而言,for循环运行良好


似乎我遗漏了一些东西:转义引号。有什么想法吗?

反引号不能嵌套。改为使用
$(…)

如果要嵌套回引号,必须将其转义:

VAR=`for i in \`find . -mtime 0 -name '*XML*' -exec ls '{}' \;\`; do unzip -l "$i"| awk -F. '{if ($2=="XML") print $0}'|wc -l; done| paste -sd+ | bc`
但是,正如choroba所建议的,使用
$(…)
可能更好:

特别是,如果决定在双引号内使用反引号,则必须小心转义内部双引号:

test="example `echo \"internal\"`"
使用括号时,它将变为“更干净”:


希望这对你有所帮助=)

你需要摆脱内心的不安。
test="example `echo \"internal\"`"
test="example $(echo "internal")"