如何将ls -1的结果加入到一行中,并用我想要的任何内容将其分隔?


当前回答

类似于第一个选项,但省略了后面的分隔符

ls -1 | paste -sd "," -

其他回答

用换行符替换最后一个逗号:

ls -1 | tr '\n' ',' | sed 's/,$/\n/'

Ls -m包含屏幕宽度字符处的换行符(例如第80行)。

主要是Bash(只有ls是外部的):

saveIFS=$IFS; IFS=$'\n'
files=($(ls -1))
IFS=,
list=${files[*]}
IFS=$saveIFS

在Bash 4中使用readarray(又名mapfile):

readarray -t files < <(ls -1)
saveIFS=$IFS
IFS=,
list=${files[*]}
IFS=$saveIFS

感谢gniourf_gniourf的建议。

为了避免tr的换行符混淆,我们可以在ls中添加-b标志:

ls -1b | tr '\n' ';'

就bash

mystring=$(printf "%s|" *)
echo ${mystring%|}

你可以使用:

ls -1 | perl -pe 's/\n$/some_delimiter/'

Ls有选项-m,用“,”一个逗号和一个空格分隔输出。

ls -m | tr -d ' ' | tr ',' ';'

将此结果输送到tr以删除空格或逗号,这将允许您再次将结果输送到tr以替换分隔符。

在我的例子中,我用分隔符替换分隔符;

取代;使用您喜欢的任意一个字符分隔符,因为tr仅用于作为参数传入的字符串中的第一个字符。