2012-10-08 75 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

反引號不能嵌套。改爲使用$(...)

相關問題