次のコードがあります。
function test() {
for ft in "$1"; do
echo $ft
done
}
test 5
私は数字12を繰り返すので、ftが1,2,3,4,5
各ループに個別に含まれることを望みます。しかし、5つだけ印刷されます。私も試してみましたが、{1..$1}
まだ同じ結果です。助けてください!
答え1
何を求めているのか分からない。パラメータを指定してから1からその値まで繰り返しますか?その場合は、bash(および他のシェル)を使用してこれを実行できます。
function test() {
for ((i = 1; i <= $1; ++i)); do
echo $i
done
}
test 12
1
2
3
4
5
6
7
8
9
10
11
12
この構文をサポートするシェルがない場合は、for(...)
次のコマンドを使用して同じことを実行できます。
function test() {
i=1
while [ $i -le $1 ]; do
echo $i
i=$(expr $i + 1)
done
}
答え2
この問題は2つの方法で解決できます。
関数に整数を与え、開始値(1)とその整数の間の整数を出力します。
count_up () { seq "$1"; }
または
count_up () { for (( i = 1; i <= $1; ++i )); do echo "$i" done }
または
count_up () { value=1 while [ "$value" -le "$1" ]; do echo "$value" done }
または他の変形数。
egを使用して実際の整数を関数の引数として取り、単純に
count_up {1..5}
関数を次のように定義します。count_up () { printf '%s\n' "$@"; }
または
count_up () { for value do echo "$value" done }
seq 5
しかし、これは直接呼び出すか使用できるのであまり意味がありませんprintf '%s\n' {1..5}
(また、関数はおそらくこのように呼び出されるべきですlist_args
)。