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



我正在计算删除 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 所建议的那样,最好使用 $(...)

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")"

希望这有帮助=)

相关内容

  • 没有找到相关文章

最新更新