大括号扩展的奇怪问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
procareer
帖子: 2
注册时间: 2011-09-06 8:46

大括号扩展的奇怪问题

#1

帖子 procareer » 2011-09-06 9:38

问题源于对源代码行数统计的一个命令:

代码: 全选

find . -name "*.c" -o -name "*.h" | xargs wc -l
为了简便想写成:

代码: 全选

find . -name{" *.c -o"," *.h"} | xargs wc -l
提示:
find: 未知的断言“-name *.c -o”
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 大括号扩展的奇怪问题

#2

帖子 我就是我2 » 2011-09-06 10:02

代码: 全选

find $(echo -name{" *.c -o"," *.h"}) | xargs wc -l
你还不如像原来那样直接写。 :em20
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 大括号扩展的奇怪问题

#3

帖子 eexpress » 2011-09-06 10:08

又不是写C。多带空格先。
没写过{}的。你还可能要转义。
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 大括号扩展的奇怪问题

#4

帖子 fnan » 2011-09-06 13:52

eval find -name{' "*.c" -o',' "*.h"'} |xargs -d'\n' wc -l
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 大括号扩展的奇怪问题

#5

帖子 lilydjwg » 2011-09-06 14:43

zsh 下可以这样:

代码: 全选

wc -l **/*.[ch]
另外,find 也支持 []:

代码: 全选

find . -name "*.[ch]" | xargs wc -l
procareer
帖子: 2
注册时间: 2011-09-06 8:46

Re: 大括号扩展的奇怪问题

#6

帖子 procareer » 2011-09-06 16:15

:em01
学了不少东西,谢谢大学!~
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 大括号扩展的奇怪问题

#7

帖子 fnan » 2011-09-06 22:01

find . -regex ".*\.\(ac\|bh\)"
#多字符后缀。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复