我想要目录中文件的管道分隔列表。
我觉得这应该有用
ls *.txt | join -t '|'
但是
join
需要一个文件。
我觉得应该存在一些涉及 <
的奇怪字符组合,使得 join
从管道获取输入。
是这样吗?它是什么?
或者有更简单的方法吗?
默认情况下,当输出到管道时,
ls
将在每个文件之间添加换行符。如果您有任何名称中带有换行符的文件,这样的技巧将会失败,但现在对您来说最简单的解决方案可能就是使用 tr
将 \n
替换为 |
。例如:
ls *.txt | tr \\n \|
是这样吗?
不。
join
连接 两个 文件。
或者有更简单的方法吗?
将 IFS 设置为管道,为文件设置参数并使用
$*
打印它们。类似的事情可以用 bash 数组来完成。
( IFS='|'; set -- *.txt; echo "$*" )
在换行符上打印文件并用管道连接它们。更好的是,使用零字节。
printf "%s\n" *.txt | paste -sd'|'
不要解析 ls。使用 shellcheck 检查您的脚本。