编号数组元素 - 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
我有一个名为 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