#!/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
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
是否可以将嵌套 for 循环内部的变量设为局部。
小智 10
是否可以将嵌套 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
Run Code Online (Sandbox Code Playgroud)
$ ./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
Run Code Online (Sandbox Code Playgroud)
如果在子 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
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)