我在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