循环查找错误的Unix脚本---find:路径必须在表达式之前

循环查找错误的Unix脚本---find:路径必须在表达式之前,unix,Unix,我正在制定脚本,以便for循环使用find命令自动执行。 我收到错误“查找:路径必须在表达式之前” 例如: 剧本 你很可能因为使用了 "`echo $something` another thing" 对于您似乎正在做的事情,您可以简单地: myvar="$somevar another thing" 这样可以避免与命令的多次扩展相关的所有问题。而您的for循环是次优的。你为什么不: find some options -print | sed some other options | ..

我正在制定脚本,以便for循环使用find命令自动执行。 我收到错误“查找:路径必须在表达式之前”

例如:

剧本
你很可能因为使用了

"`echo $something` another thing"
对于您似乎正在做的事情,您可以简单地:

myvar="$somevar another thing"
这样可以避免与命令的多次扩展相关的所有问题。而您的for循环是次优的。你为什么不:

find some options -print | sed some other options | ...
要仅查看常规文件,可以将
-键入f
添加到find命令中

让简单的事情简单化,试着理解你在做什么。做得过多通常会带来麻烦

更新:除了上面我所说的一般建议之外,您还需要使用
evalfind$…
。否则,命令行选项不会像预期的那样单独传递以查找,而是作为单个选项传递,其中包含空格。您看到的引号是由bash插入的,因此您可以看到
\(
被传递,而不仅仅是一个
)。
不过,使用eval有它自己的挑战,因为它删除了一层转义和引用。因此,在您的情况下,您可能需要额外转义
*
符号。

使用eval可能会破坏您的脚本

"`echo $something` another thing"
对于您似乎正在做的事情,您可以简单地:

myvar="$somevar another thing"
这样,您就避免了与命令的多次扩展相关的所有问题。而且您的for循环是次优的。您为什么不:

find some options -print | sed some other options | ...
要仅查看常规文件,可以将
-键入f
添加到find命令中

把简单的事情简单化,试着理解你在做什么。做得太多往往会带来麻烦

更新:除了我上面所说的一般建议之外,您还需要使用
eval find$…
。否则,您的命令行选项不会像预期的那样单独传递给find,而是作为一个带有空格的单个选项传递给find。您看到的引号由bash插入,因此您可以看到
\(
是通过文字传递的,它不仅仅是一个
实际上应该是这样)。
但是使用eval有它自己的挑战,因为它删除了一层转义和引用。因此,在您的情况下,您可能需要另外转义
*
符号。

实际上,错误“find:路径必须在表达式之前”是因为find-alogic/batch/Instrument b/Instrument/Bank b/Instrument/container b/Instrument/Authorize b/Instrument/Common b/Instrument/Confirm-type d'('-path-alogic/batch/Instrument/BuyerCredit-o-path-alogic/batch/Instrument/DebitCard'))-prune-o-name'*.cpp'-print如果我删除了'(单引号)问题解决了。我如何删除单引号..您不需要
-type d-type d
(其中一个就足够了)。但这不是问题的根源。实际上,错误“find:路径必须在表达式之前”是因为find-alogic/batch/Instrument b/Instrument/Bank b/Instrument/container b/Instrument/Authorize b/Instrument/Common b/Instrument/Confirm-type d'('-path-alogic/batch/Instrument/BuyerCredit-o-path-alogic/batch/Instrument/DebitCard'))-prune-o-name'*.cpp'-print如果我删除了'(单引号)问题解决了。我如何删除单引号。您不需要
-type d-type d
(其中一个就足够了)。但这不是您的问题的根源。您好,非常感谢我使用eval解决了问题。
eval find$inclusive\u directories$exclusive\u unix\u notation-prune-o-name“*.cpp”-print
Hello非常感谢我使用eval解决了问题。
eval find$inclusive\u directories$exclusive\u unix\u notation-prune-o-name“*.cpp”-print