我正在计算删除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
循环运行良好。
似乎我错过了一些东西:逃避报价。有什么想法吗?
答案 0 :(得分:4)
反引号不能嵌套。请改用$( ... )
。
答案 1 :(得分: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")"
希望这有助于=)