[英]What is the simplest way to get the length of a range or set of items in bash?
我有一种情况,我可以使用以下任一方法指定一个 for 循环范围
获得该集合长度的最简单方法是什么?
# 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
一种可能:
set="{1..10}"
length=$(count=0 && for i in $(eval echo $set); do count=$(($count+1)); done && echo $count)
echo $length
10
set="tcp udp"
length=$(count=0 && for i in $(eval echo $set); do count=$(($count+1)); done && echo $count)
echo $length
2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.