Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本中变量的作用域_Bash_Variables_Scope - Fatal编程技术网

bash脚本中变量的作用域

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

我在下面的简单bash脚本中使用了三次变量“I”,它基本上生成了数组中不存在的随机数。有人能帮我理解这里每个变量的范围吗

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