通过查找使用换行符隔离文件的 POSIX-ly 正确方法?

通过查找使用换行符隔离文件的 POSIX-ly 正确方法?

有一个问题如何查找文件名中包含换行符的文件?,其中接受的答案通过 ANSI-C 引用处理使用换行符隔离文件,并且在ksh和中工作正常bash,但我如何在 POSIX shell 中处理这个问题?具体来说,我正在使用dash

答案1

经过评论中的讨论并查看我引用的相关问题后,使用换行符的一种方法-name是使用文字换行符,如下所示:

$ find -type f -name '*
> *'

另一种是通过命令替换:

$ find -name "$(printf '*\n*' )"
./with?newline
$ ls
another execve with?newline

但要注意的是POSIX 定义,命令替换由 shell 执行,并带有“...在替换末尾删除一个或多个字符的序列”。那是这样的:

find -type f -name '*'"$(printf '\n')"'*'

失败并传入**参数列表,而不是*[newline]*像人们想象的那样。

命令替换中的尾随换行符可以通过多种方式处理,如下所示shell:在命令替换中保留尾随换行符('\n')

相关内容