bashのforループで入力パラメータを整数値に変換するには? [コピー]

bashのforループで入力パラメータを整数値に変換するには? [コピー]

for私のbashスクリプトでループの入力変数として数値を使用しようとしていますが、次のようにスクリプトを実行します。

./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

これは私にこれが整数ではないと思います。入力パラメータをスクリプトに整数として読んでくれてありがとう。

答え1

これは2つの方法で行うことができます。

ksh93互換シェル(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シェルを使用する:

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

このseqコマンド(GNU固有)は、$ 2で指定された数字を1から$ 2まで別々の行に印刷します。コマンド置換は、変更されていない場合$IFS(デフォルトでは行区切り文字を含む)をfor繰り返すのと同じ数の要素に分割します。

答え2

大きな打撃を受けた状態で使用する構成は次のとおりです。{1..$(($2))}または中{1..$2}かっこ拡張です。これがうまくいかないのは、シェル拡張順序で中かっこ拡張が最初に来るためです。したがって、この拡張がいつ発生するかは$2まだ問題であり、望むもので$25ありません。これにより、支柱の拡張は機能しません。作成した1..$2後に拡張する必要がある場合、$2シェルはこれを行い、次の単語だけを残します。

{1..5}

中かっこは中かっこ拡張によって消費されないため、まだ存在します。

回避策については、次を参照してください。Raman Sailopalの答え

関連情報