簡體   English   中英

獲取 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 -lgrep -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM