[英]bash loop through list of numbers except given number
循環遍歷bash中的連續數字列表我能做到
for s in $(seq 1 5);do
echo ${s}
done
循環遍歷一個連續的數字列表,在python中留下給定的數字,我可以這樣做:
list = [s2 for s2 in range(6)[1:] if s2 != s1]
for s1 in list:
print s1
其中list包含除s1之外的所有數字
我如何在bash中做同樣的事情?
只需使用continue
跳過此步驟:
for s in {1..5} # note there is no need to use $(seq...)
do
[ "$s" -eq 3 ] && continue # if var is for example 3, jump to next loop
echo "$s"
done
返回:
1
2
4 # <--- 3 is skipped
5
從Bash參考手冊→4.1 Bourne Shell Builtins :
繼續
continue [n]
恢復封閉for,while,until或select循環的下一次迭代。 如果提供n,則恢復執行第n個封閉循環。 n必須大於或等於1.返回狀態為零,除非n不大於或等於1。
添加短路評估, ||
(邏輯OR):
for s in $(seq 1 5); do
(( s == 3 )) || echo "$s"
done
(( s == 3 ))
檢查$s
是否等於3
,否則( ||
) echo
該數字。
使用反向檢查( $s
不等於3
)和邏輯AND( &&
):
for s in $(seq 1 5); do
(( s != 3 )) && echo "$s"
done
經典方式, if
進行test
( [
),非股權test
:
for s in $(seq 1 5); do
if [ "$s" -ne 3 ]; then
echo "$s"
fi
done
反向test
,股權檢查:
for s in $(seq 1 5); do
if [ "$s" -eq 3 ]; then
continue
fi
echo "$s"
done
continue
將使循環控制進入頂部而不是評估以下命令。
還有一個bash
關鍵字[[
在大多數情況下表現相似但更強大。
您可以像這樣使用BASH算術構造((...))
:
s1=3 # skip this
s2=6 # upper count
for ((i=1; i<s2; i+=(i==s1-1?2:1) )); do echo $i; done
1
2
4
5
關於: i+=(i==s1-1?2:1)
在for循環中,而不是總是將i
遞增1
這里我們將i
遞增2
當i
比要跳過的數字少1
時。
或者使用BASH數組解決方案 :
arr=({1..5}) # populate 1 to 5 in an array
unset arr[s1-1] # delete element s1-1
# print the array
printf "%s\n" "${arr[@]}"
1
2
4
5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.