我有以下代码:
function test() {
for ft in "$1"; do
echo $ft
done
}
test 5
我正在尝试循环遍历数字 12,因此我希望 ft1,2,3,4,5
分别位于每个循环中。但它只是打印 5。我也尝试过,{1..$1}
但结果仍然相同。请帮忙!
答案1
我不太确定你在问什么。您想提供一个参数,然后循环从 1 到该值吗?如果是这样,您可以使用 bash (也可能使用其他 shell)来执行此操作:
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(...)
语法的 shell,您可以使用以下命令执行相同的操作:
function test() {
i=1
while [ $i -le $1 ]; do
echo $i
i=$(expr $i + 1)
done
}
答案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
)。