1
for file in `find . -name "*.po"` ; do msgfmt -o `echo $file | sed s/\.po/\.mo/` $file ; done

我发现的这段代码是在 PO 文件的所有子目录中创建多个 MO 文件。第一次,它运作良好。但是当我第二次运行它时;

它显示了一些语法错误消息。我检查了 msgfmt 抱怨的 PO 文件,但它们以前不存在。它们是在运行此代码后创建的。

例如,该文件是 secpolicy.po,但它还创建了另一个 secpolicy.po 文件。

该代码有什么问题?

4

1 回答 1

1

问题很可能与引用有关。由于您不引用 sed 模式,因此 shell 将反斜杠解释为 sed 并调用

sed s/.po/.mo/

当您有一个名为 的文件时secpolicy.po,它会将其更改为se.molicy.po,这会导致调用

msgfmt -o se.molicy.po secpolicy.po

sed要解决此问题,请将

echo $file | sed 's/\.po$/.mo/'

请参阅附加的单引号'和字符串的结尾$

如果你有一个文件abc.po,它将匹配点\.、字符串po和最后的行尾$,然后用 替换这个匹配.mo,结果是abc.mo

于 2013-02-03T00:22:33.207 回答