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
まだ問題であり、望むもので$2
は5
ありません。これにより、支柱の拡張は機能しません。作成した1..$2
後に拡張する必要がある場合、$2
シェルはこれを行い、次の単語だけを残します。
{1..5}
中かっこは中かっこ拡張によって消費されないため、まだ存在します。
回避策については、次を参照してください。Raman Sailopalの答え。