#!/bin/bash
for i in 1 2 3 4
do
# {
# local i ##gives error local: can only be used in a function
for i in 1 2 3
do
echo "inner loop ----- $i"
(( i++ ))
done
# }
echo $i
done
输出:
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
是否可以使嵌套 for 循环内的变量成为本地变量。
答案1
是否可以使嵌套 for 循环内的变量成为本地变量。
是的,但只使用一个函数。
由于内置函数local
只能存在于函数内部,因此我们需要提供一个函数来使变量的i
作用域从全局更改为局部:
#!/bin/bash
internalfunction () {
local i ### Works as is inside a function
for i in 1 2 3; do
echo "inner loop ----- $i"
(( i++ ))
done
}
for i in 1 2 3 4; do
echo $i
internalfunction
done
$ ./script.sh
1
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
2
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
3
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
答案2
如果在子 shell 中运行内部变量,它将不会影响外部变量:
for i in 1 2 3 4; do
(
for i in 1 2 3; do
echo "inner loop ----- $i"
(( i++ ))
done
)
echo $i
done
结果是:
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
1
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
2
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
3
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4