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

在bash中,如何打印列表的前n个元素?,bash,syntax,Bash,Syntax,在bash中,如何打印列表的第一个n元素 例如,此列表中的前10个文件: FILES=$(ls) 更新:我忘了说我想在一行上打印元素,就像用echo$FILES打印整个列表一样 FILES=(*) echo "${FILES[@]:0:10}" 即使文件名中有空格,也应正常工作 FILES=$(ls)创建一个字符串变量文件=(*)创建一个数组。有关更多信息,请参阅本页。(感谢lhunah)echo$FILES | awk'{for(i=1;i以交互方式执行此操作: set$FILES&&ev

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

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

FILES=$(ls)
更新:我忘了说我想在一行上打印元素,就像用
echo$FILES
打印整个列表一样

FILES=(*)
echo "${FILES[@]:0:10}"
即使文件名中有空格,也应正常工作


FILES=$(ls)
创建一个字符串变量<代码>文件=(*)创建一个数组。有关更多信息,请参阅本页。(感谢lhunah)

echo$FILES | awk'{for(i=1;i以交互方式执行此操作:

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

要将其作为脚本运行,请使用内容创建foo.sh

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

并将其作为

bash foo.sh 10$文件

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

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

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

ls -1 | head -50
我的方式是:

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

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

在回答“Ayman Hourieh”和“Shawn Chin”时添加,以防目录内容以外的内容需要它

在较新版本的bash中,可以使用mapfile将目录存储在数组中。请参阅
帮助mapfile

mapfile -t files_in_dir < <( ls )
最后一个元素(不要忘记“:”后面的空格):

范围,例如从10到20:

${files_in_dir[@]:10:20}

注意大型目录,这比其他解决方案占用的内存要多。

如果文件名中有空格,则无法正常工作。我知道这一点,但我认为dehmann希望使用这种特定方法,因此我认为空格不会成为问题。顺便问一句,您是指文件=(*)echo“${FILES[@]:0:10}?在这里效果更好。不,它打印数组的前10个元素。数组包含作为项的文件名。您对ABS的引用是错误的。它们不使用引号(典型的ABS),因此在扩展的文件名上会导致分词错误。ABS充满了这样的隐藏错误,任何人都可以从中学习(除了你,很明显,你做得对)来继承那些bug!我想改为参考。ABS包含了大量有用的信息。但在这种情况下,你提供的链接更相关,所以我将其添加到我的答案中。你应该更清楚地了解FILE=(*);可能使用原始命令sub:FILES=($(ls))@guns,既然你可以使用globbing,为什么还要生成一个
ls
进程呢?我对我的解决方案做了一个小小的修改。它应该将所有文件名打印在一行上。你试过了吗?请阅读:--如果你想避免文件灾难,了解bash的复杂性和陷阱是很重要的。OP希望它打印在一行上。请参阅注释。This可以给你多个目录。也许你的意思是
$(ls-1 | head-1)
?回答得好。我也许你也应该添加
-1
,比如
ls-1 | head-10 | tr“\n”“
。无论如何,这就是我要找的;)在我看来,这是最好的答案。很好很简单。列出它们。选择前10个。去掉空格的换行符。完成了,完成了。回答不错。
ls | head -10 | tr "\n" " "
mapfile -t files_in_dir < <( ls )
${files_in_dir[0]}
${files_in_dir[@]: -1}
${files_in_dir[@]:10:20}