Bash

如何在bash的for循環中將輸入參數轉換為整數值?

  • February 19, 2022

在我的 bash 腳本中,我嘗試使用數字作為輸入變數forfor 循環我將腳本執行為

./script.sh InputFolder/ Number_of_iterations

Number_of_iterations該腳本應該在給定的文件夾中執行,並按照變數設置的次數執行 for 循環。但不知何故,我無法將變數設置為整數。

這是我在腳本中循環的一個例子:

for i in {1..$(($2))}
do
echo "Welcome $i times"
done

我已經嘗試過雙括號$(($...))選項以及雙引號"...",但我不斷得到的輸出是

Welcome {1..5} times

這讓我覺得,這不是一個整數。在將輸入參數作為整數讀取到腳本中時,我將不勝感激。

您可以通過以下兩種方式執行此操作:

使用與 ksh93 兼容的 shell(ksh93、zsh、bash):

for (( i=1;i<=$2;i++ ))
do
echo "Welcome $i times"
done

這裡我們將 i 設置為 1 並循環,將其遞增直到小於或等於 $2,輸出:

Welcome 1 times
Welcome 2 times

在 GNU 系統上使用 POSIX shell:

for i in $(seq "$2")
do
echo "Welcome $i times"
done

seq命令(特定於 GNU)將在單獨的行上輸出從 1 到 $2 中指定的數字的數字。假設您沒有修改$IFS(預設情況下包含行分隔符),命令替換會將其拆分為盡可能多的元素for以便循環。

引用自:https://unix.stackexchange.com/questions/418809