sh:目录中用管道分隔的文件列表操质量标准

问题描述 投票:0回答:2

我想要目录中文件的管道分隔列表。

我觉得这应该有用

ls *.txt | join -t '|' 

但是

join
需要一个文件。 我觉得应该存在一些涉及
<
的奇怪字符组合,使得
join
从管道获取输入。 是这样吗?它是什么? 或者有更简单的方法吗?

sh
2个回答
0
投票

默认情况下,当输出到管道时,

ls
将在每个文件之间添加换行符。如果您有任何名称中带有换行符的文件,这样的技巧将会失败,但现在对您来说最简单的解决方案可能就是使用
tr
\n
替换为
|
。例如:

ls *.txt | tr \\n \|

0
投票

是这样吗?

不。

join
连接 两个 文件。

或者有更简单的方法吗?

将 IFS 设置为管道,为文件设置参数并使用

$*
打印它们。类似的事情可以用 bash 数组来完成。

( IFS='|'; set -- *.txt; echo "$*" )

在换行符上打印文件并用管道连接它们。更好的是,使用零字节。

printf "%s\n" *.txt | paste -sd'|'

不要解析 ls。使用 shellcheck 检查您的脚本。

© www.soinside.com 2019 - 2024. All rights reserved.