有一个问题如何查找文件名中包含换行符的文件?,其中接受的答案通过 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')。