bash 带有传递参数的函数中的循环
bash for loop in function with passing parameters
我是 bash 的新手,找不到任何合适的答案,希望你们能帮助我。对不起,如果我的问题的答案太明显了。
我想创建一个参数数量可变的函数,它应该用 for 循环打印出来。
传递的参数是可打印的字符串。输出应该是 "for loop" 的数字,以 1 开头,然后是传递的参数。我找不到解决方案说:打印迭代次数,然后在迭代位置打印函数参数。
我总是得到错误:无效号码
请原谅我的困惑。谢谢
它应该是这样的
SOME TEXT
1: String1
2: String2
3: String3
func() {
echo -e "SOME TEXT"
for i in "$@"; do
printf '%d: %s\n' "$i" "$@" # I also tried "${i[@]}"
done
}
func String1 String2 String3
在您的代码中,$i
将是传递给函数的每个参数。无法根据 printf
将其转换为数字,因此它会抱怨。
那是因为 $@
是传递给函数的所有参数的列表。在您的例子中,$@
包含元素 String1
、String2
和 String3
。
这就是你的意思:
func(){
echo -e "SOME TEXT"
i=0
for arg in "$@"; do
i=$((i+1))
printf '%d: %s\n' "$i" "$arg"
done
}
func String1 String2 String3
func() {
echo -e "SOME TEXT"
for ((i=1; i<=$#; i++)); do
eval str=$$i
printf '%d: %s %s\n' "$i" "$str" "${!i}"
done
}
使用间接引用访问变量。 str
是旧方法,${!i}
是新方法 shorthand。
我是 bash 的新手,找不到任何合适的答案,希望你们能帮助我。对不起,如果我的问题的答案太明显了。
我想创建一个参数数量可变的函数,它应该用 for 循环打印出来。 传递的参数是可打印的字符串。输出应该是 "for loop" 的数字,以 1 开头,然后是传递的参数。我找不到解决方案说:打印迭代次数,然后在迭代位置打印函数参数。
我总是得到错误:无效号码
请原谅我的困惑。谢谢
它应该是这样的
SOME TEXT
1: String1
2: String2
3: String3
func() {
echo -e "SOME TEXT"
for i in "$@"; do
printf '%d: %s\n' "$i" "$@" # I also tried "${i[@]}"
done
}
func String1 String2 String3
在您的代码中,$i
将是传递给函数的每个参数。无法根据 printf
将其转换为数字,因此它会抱怨。
那是因为 $@
是传递给函数的所有参数的列表。在您的例子中,$@
包含元素 String1
、String2
和 String3
。
这就是你的意思:
func(){
echo -e "SOME TEXT"
i=0
for arg in "$@"; do
i=$((i+1))
printf '%d: %s\n' "$i" "$arg"
done
}
func String1 String2 String3
func() {
echo -e "SOME TEXT"
for ((i=1; i<=$#; i++)); do
eval str=$$i
printf '%d: %s %s\n' "$i" "$str" "${!i}"
done
}
使用间接引用访问变量。 str
是旧方法,${!i}
是新方法 shorthand。