我是新来的,找不到合适的答案,希望你们能帮助我。对不起,如果我的问题的答案太明显了,我想创建一个参数数量可变的函数,应该用for循环打印出来。
我想创建一个参数数量可变的函数,它应该用for循环打印出来,传递的参数是可打印的字符串。输出应该是 "for循环 "的数字,从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}
是一种较新的速记方法。