我在Solaris 10上,并且已经使用ksh(88),bash(3.00)和zsh(4.2.1)测试了以下内容。
以下代码不会产生任何结果:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
这一发现不匹配多个文件(如更换-exec ...
用-print
),并从外面叫时功能完美的作品find
调用。
这是该man find
页面所说的-exec
:
-exec命令如果执行的命令返回a,则为true。 零值作为退出状态。结尾 命令必须由逃逸者标点 分号(;)。命令参数{}是 替换为当前路径名。如果 -exec的最后一个参数是{},而您 指定+而不是分号(;), 该命令被调用的次数更少, {}替换为路径名组。如果 该命令的任何调用都会返回一个 非零值作为退出状态,找到 返回非零退出状态。
我可能会逃脱做这样的事情:
for f in $(find somedir); do
foo
done
但是我担心要处理字段分隔符问题。
是否可以从调用中调用Shell函数(在同一脚本中定义,让我们不用担心范围问题)find ... -exec ...
?
我尝试了两者/usr/bin/find
,/bin/find
并得到了相同的结果。
export -f foo