我想在一行中回显所有列表,以 TAB 分隔(就像ls
处理一个文件夹中的文件一样)
for i in one two some_are_very_long_stuff b c; do echo $i; done
每个单词打印一行:
one
two
some_are_very_long_stuff
b
c
相反,我想打破它,就像ls
没有选项一样:
mkdir /tmp/test
cd /tmp/test
for i in one two some_are_very_long_stuff b c z; do touch $i; done
ls
将输出
b one two
c some_are_very_long_stuff z
答案1
您可以使用columns
GNU 的命令autogen
。
$ seq 60 | columns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
53 54 55 56 57 58 59 60
通过zsh
,您可以使用print -C
:
$ print -C4 {1..20}
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
$ print -aC4 {1..20}
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
如果您需要先对它们进行排序(就像这样ls
做):
$ print -oC4 {1..20}
1 14 19 5
10 15 2 6
11 16 20 7
12 17 3 8
13 18 4 9
答案2
从echo
手册页:
-n do not output the trailing newline
-e enable interpretation of backslash escapes
If -e is in effect, the following sequences are recognized:
...
\t horizontal tab
所以这会做:
for i in one two some_are_very_long_stuff a b c d e f g h i j k l m n o; do
echo -en "$i\t";
done; echo