编号数组元素 - Bash脚本

时间:2015-04-27 20:01:14

标签: bash shell unix scripting

我有一个名为c的数组。 它的元素是在当前目录中找到的文件名。我如何在他们自己的行上列出他们之前的数字? 例如:

1. aaa
2. filename2
3. bbb
4. asdf

我现在的代码只是在自己的行上打印每个文件。像:

aaa
filename2
bbb
asdf

我的代码如下:

#!/bin/bash
c=( $(ls --group-directories-first $*) )

   printf '%s\n' "${c[@]}"

2 个答案:

答案 0 :(得分:1)

从数组c开始,有以下三种方法:

使用cat -n

cat实用程序将对输出行进行编号:

$ cat -n < <(printf "%s\n" "${c[@]}")
     1  aaa
     2  filename2
     3  bbb
     4  asdf

使用bash

此方法使用shell算法对行进行编号:

$ count=0; for f in "${c[@]}"; do  echo "$((++count)). $f"; done
1. aaa
2. filename2
3. bbb
4. asdf

使用nl

在评论中,twalberg建议使用nl

$ nl < <(printf "%s\n" "${c[@]}")
     1  aaa
     2  filename2
     3  bbb
     4  asdf

实用程序nl有多个选项可用于准确控制编号的编排方式,例如左/右对齐,包含前导零。请参阅man nl

答案 1 :(得分:1)

这应该有效:

for (( i=0; i<${#c[@]}; i++)); do
printf '%d. %s\n' $((i+1)) "${c[$i]}"
done