2012-10-08 79 views
0

我指望包含在ZIP探头被丢弃传递的循环结果VAR失败

当我运行这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循环运行良好。

看来我错过了一些重述:转义引号。任何想法?

+0

你需要躲避反引号内。 – Eric

回答

3

如果您想窝反引号,则必须退出:

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建议,它可能是更好的使用$(...)

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) 

特别是由于如果您决定在双引号内使用反引号,则必须注意转义内部双引号:

test="example `echo \"internal\"`" 

当括号就变成了 “干净”:

test="example $(echo "internal")" 

希望这有助于=)

+0

它有帮助。谢谢。接受并投票决定。 – Chris

4

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

相关问题