编号数组元素 - Bash 脚本

Numbering Array Elements - Bash 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[@]}"

从数组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 有许多选项可用于精确控制编号的完成方式,例如,left/right 对齐、包含前导零。参见 man nl

这应该有效:

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