如何迭代for循环中的参数数量?
How to iterate the number of arguments in a for loop?
我是 bash 编程的新手,我正在尝试实现一个迭代参数数量的 for 循环。我尝试使用“$#”或只是“for i”,但没有用。所以,基本上,我正在寻求指导和解决该问题的方法。这是我执行脚本的时间:
./cat.sh food.sh house.sh tv.sh
在我的脚本中:
#!/bin/bash
for i in $@
do
echo $i
done
我要回显
1
2
3
而不是
food.sh
house.sh
tv.sh
在 for 循环之外保留一个 运行 计数器以迭代参数的计数。
这应该有效:
#!/bin/bash
counter=0
for i in "$@"
do
counter=$((counter+1))
echo $counter
done
输入:
./cat.sh food.sh house.sh tv.sh
输出:
1
2
3
输入:
./cat.sh a b c d e f g
输出:
1
2
3
4
5
6
7
$#
包含参数的数量,因此 OP 可以使用一个想法来编写 for
循环:
for ((i=1; i<=$#; i++))
do
echo $i
done
# or
count=$#
for ((i=1; i<=count; i++))
do
echo $i
done
假设 seq 二进制文件可用并且只考虑最终目标,可以这样写。
#!/bin/bash
seq $#
我个人不会选择这个解决方案,除非我喜欢代码高尔夫并且宁愿坚持已经发布的纯 bash 解决方案。
由于问题被标记为 sh
,这里有一个符合 POSIX 的解决方案(当您不能假设存在 seq
或 C 风格 for
循环):
i=1
while [ "$i" -le "$#" ]; do
printf '%s\n' "$i"
i=$((i+1))
done
我是 bash 编程的新手,我正在尝试实现一个迭代参数数量的 for 循环。我尝试使用“$#”或只是“for i”,但没有用。所以,基本上,我正在寻求指导和解决该问题的方法。这是我执行脚本的时间:
./cat.sh food.sh house.sh tv.sh
在我的脚本中:
#!/bin/bash
for i in $@
do
echo $i
done
我要回显
1
2
3
而不是
food.sh
house.sh
tv.sh
在 for 循环之外保留一个 运行 计数器以迭代参数的计数。
这应该有效:
#!/bin/bash
counter=0
for i in "$@"
do
counter=$((counter+1))
echo $counter
done
输入:
./cat.sh food.sh house.sh tv.sh
输出:
1
2
3
输入:
./cat.sh a b c d e f g
输出:
1
2
3
4
5
6
7
$#
包含参数的数量,因此 OP 可以使用一个想法来编写 for
循环:
for ((i=1; i<=$#; i++))
do
echo $i
done
# or
count=$#
for ((i=1; i<=count; i++))
do
echo $i
done
假设 seq 二进制文件可用并且只考虑最终目标,可以这样写。
#!/bin/bash
seq $#
我个人不会选择这个解决方案,除非我喜欢代码高尔夫并且宁愿坚持已经发布的纯 bash 解决方案。
由于问题被标记为 sh
,这里有一个符合 POSIX 的解决方案(当您不能假设存在 seq
或 C 风格 for
循环):
i=1
while [ "$i" -le "$#" ]; do
printf '%s\n' "$i"
i=$((i+1))
done