bash脚本中变量的作用域
我在下面的简单bash脚本中使用了三次变量“I”,它基本上生成了数组中不存在的随机数。有人能帮我理解这里每个变量的范围吗bash脚本中变量的作用域,bash,variables,scope,Bash,Variables,Scope,我在下面的简单bash脚本中使用了三次变量“I”,它基本上生成了数组中不存在的随机数。有人能帮我理解这里每个变量的范围吗 timestamp="9" researchArea="5" numberOfDimensions="8" timeStampToInjectArray=() dimensionToTamperArray=() for((i=0;i<$numberOfDimensions;i++)) do echo $i while : ; do
timestamp="9"
researchArea="5"
numberOfDimensions="8"
timeStampToInjectArray=()
dimensionToTamperArray=()
for((i=0;i<$numberOfDimensions;i++))
do
echo $i
while : ;
do
timeStampToInject=$(shuf -i 0-$timestamp -n 1)
dimensionToTamper=$(shuf -i 1-$researchArea -n 1)
flag=0
for((i=0;i<${#timeStampToInjectArray[@]};i++))
do
echo $i
if [ "${timeStampToInjectArray[i]}" -eq "$timeStampToInject" ] && [ "${dimensionToTamperArray[i]}" -eq "$dimensionToTamper" ]; then
flag=1
fi
done
if [ "$flag" -eq "0" ]; then
break
fi
done
timeStampToInjectArray+=("$timeStampToInject")
dimensionToTamperArray+=("$dimensionToTamper")
echo $timeStampToInject,$dimensionToTamper
done
timestamp=“9”
researchArea=“5”
numberOfDimensions=“8”
timeStampToInjectArray=()
尺寸到电流=()
对于(i=0;i<p),如果你习惯于C、C++、java等语言,那么你会期望计数器<代码> > < /Calp>Road有局部范围。不,不是BASH。只有一个变量<代码> I/COD>:
i='hello sailor'
for ((i=0; i < 5; i++))
do
echo "outer:$i"
for ((i=0; i < 5; i++))
do
echo "inner:$i"
done
done
echo "final:$i"
Bash(像Python一样)在条件中没有块作用域,它在函数中有局部作用域,如果你想在Bash中构建结构化代码,你就必须走这条路
例如:
loop_n_times() {
local i # <<< locally scoped
local limit=$1 # <<< locally scoped
for ((i=0; i < $limit; i++))
do
echo "function:$i"
done
}
i='hello sailor'
for ((i=0; i < 5; i++))
do
echo "outer:$i"
loop_n_times 5
done
echo "final:$i"
或者,不要对不同的事物使用相同的变量名,这可能是一个好主意
loop_n_times() {
local i # <<< locally scoped
local limit=$1 # <<< locally scoped
for ((i=0; i < $limit; i++))
do
echo "function:$i"
done
}
i='hello sailor'
for ((i=0; i < 5; i++))
do
echo "outer:$i"
loop_n_times 5
done
echo "final:$i"
outer:0
function:0
function:1
function:2
function:3
function:4
outer:1
function:0
function:1
function:2
function:3
function:4
outer:2
function:0
function:1
function:2
function:3
function:4
outer:3
function:0
function:1
function:2
function:3
function:4
outer:4
function:0
function:1
function:2
function:3
function:4
final:5