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