获取 bash 中的一个范围或一组项目的长度的最简单方法是什么?
What is the simplest way to get the length of a range or set of items in bash?
在某些情况下,我可能会使用
指定 for 循环范围
- 范围
“{1..10}”
例如长度 = 10
- 或一组物品
“TCP UDP”
例如长度 = 2
获取该集合长度的最简单方法是什么?
# Bash, as brace expansion are not POSIX
count=0
for _ in {1..10}; do ((count++)); done
echo "$count" # 10
# POSIX compliant
count=0
for _ in tcp udp; do : $((count=count+1)); done
echo "$count" # 2
但是这些都没有意义,好像你事先知道值,那么你也知道计数。
如果你在bash中有一个数组,那么你可以简单地读取长度:
arr=({1..10})
echo "${#arr[@]}" # 10
arr=(tcp udp)
echo "${#arr[@]}" # 2
或者如果您有一个文件,或者来自例如的匹配项列表。 grep
然后使用 wc -l
或 grep -c
都可以:
$ my_cmd | wc -l
$ my_cmd | grep -c 'pattern'
在这两种情况下,创建一个数组:
$ x=({1..10})
$ y=(tcp udp)
然后使用参数展开得到数组中的元素个数
$ echo "${#x[@]}"
10
$ echo "${#y[@]}"
2
在某些情况下,我可能会使用
指定 for 循环范围- 范围 “{1..10}” 例如长度 = 10
- 或一组物品 “TCP UDP” 例如长度 = 2
获取该集合长度的最简单方法是什么?
# Bash, as brace expansion are not POSIX
count=0
for _ in {1..10}; do ((count++)); done
echo "$count" # 10
# POSIX compliant
count=0
for _ in tcp udp; do : $((count=count+1)); done
echo "$count" # 2
但是这些都没有意义,好像你事先知道值,那么你也知道计数。
如果你在bash中有一个数组,那么你可以简单地读取长度:
arr=({1..10})
echo "${#arr[@]}" # 10
arr=(tcp udp)
echo "${#arr[@]}" # 2
或者如果您有一个文件,或者来自例如的匹配项列表。 grep
然后使用 wc -l
或 grep -c
都可以:
$ my_cmd | wc -l
$ my_cmd | grep -c 'pattern'
在这两种情况下,创建一个数组:
$ x=({1..10})
$ y=(tcp udp)
然后使用参数展开得到数组中的元素个数
$ echo "${#x[@]}"
10
$ echo "${#y[@]}"
2