在bash中,如何打印列表的前n个元素?

时间:2009-05-20 00:01:50

标签: bash syntax

bash中,如何打印列表的第一个n元素?

例如,此列表中的前10个文件:

FILES=$(ls)

更新:我忘了说我要在一行打印元素,就像用echo $FILES打印整个列表一样。

8 个答案:

答案 0 :(得分:24)

FILES=(*)
echo "${FILES[@]:0:10}"

即使文件名中有空格,也应该正常工作。

FILES=$(ls)创建一个字符串变量。 FILES=(*)创建一个数组。有关examples on using arrays in bash的更多信息,请参阅此页面。 (感谢lhunath)

答案 1 :(得分:5)

FILE="$(ls | head -1)"

我尝试时也正确处理了文件名中的空格。

答案 2 :(得分:4)

为什么不打印前50个文件:

ls -1 | head -50

答案 3 :(得分:2)

我的方式是:

ls | head -10 | tr "\n" " "

这将打印ls返回的前10行,然后tr用空格替换所有换行符。输出将在一行上。

答案 4 :(得分:2)

echo $FILES | awk '{for (i = 1; i <= 10; i++) {print $i}}'

编辑:AAh,错过了你在一条线上需要它们的评论...

echo $FILES | awk '{for (i = 1; i <= 10; i++) {printf "%s ", $i}}'

那个人那样做。

答案 5 :(得分:1)

以交互方式进行:

set $FILES && eval eval echo \\\${1..10}

将其作为脚本运行,创建包含内容的foo.sh

N=$1; shift; eval eval echo \\\${1..$N}

并将其作为

运行

bash foo.sh 10 $FILES

答案 6 :(得分:0)

“ Ayman Hourieh”和“ Shawn Chin”的答案的补充,以防目录内容以外的其他内容。

在较新版本的bash中,您可以使用mapfile将目录存储在数组中。参见help mapfile

mapfile -t files_in_dir < <( ls )

如果要完全使用bash,请使用printf "%s\n" *而不是ls,或仅将ls替换为您需要的任何其他命令。

现在,您可以照常访问数组并获取所需的数据。

第一个元素:

${files_in_dir[0]}

最后一个元素(不要忘记“:”后的空格):

${files_in_dir[@]: -1}

范围,例如从10到20:

${files_in_dir[@]:10:20}

注意大型目录,这比其他解决方案消耗更多的内存。

答案 7 :(得分:0)

FILES=$(ls)
echo $FILES | fmt -1 | head -10