Bash,如果是,重用变量

时间:2012-10-05 11:11:52

标签: bash

if [[ $line == *"option 1"* ]]
then
     CURRENT_OPTION=1
fi

if [[ $line == *"option 2"* ]]
then
     CURRENT_OPTION=2
fi

if [[ $line =~ "What i want" ]]
then            
    if [[ $CURRENT_OPTION -eq 1 ]]
    then
        MEM1=$(awk '/Used heap/ { gsub(/M/, " "); print $4 }')
    elif [[ $CURRENT_OPTION -eq 2 ]]
    then
        MEM2=$(awk '/Used heap/ { gsub(/M/, " "); print $4 }')
    fi
fi

因为CURRENT_OPTION是在if中定义的,所以当在第三个if中检查时,它的值不正确。如何将其传递出去?

2 个答案:

答案 0 :(得分:1)

只需在顶部声明CURRENT_OPTION,例如:

   declare -i CURRENT_OPTION=0

i将其声明为int

答案 1 :(得分:0)

在所有if语句中,您应将变量括在双引号中。如果变量是空字符串(或者变量不存在),那么if语句将不包含足够的参数并将引发错误。

以下是一个例子:

if [[ $var -eq 1 ]]
then 
    echo yes
else
    echo no
fi

如果var未初始化,bash会将语句扩展为如下所示:

if [[ -eq 1 ]]
then 
    echo yes
else
    echo no
fi

没有足够的参数使if语句在这里有效,而bash会抛出错误:

bash: conditional binary operator expected
bash: syntax error near `1'

通过将变量包装在引号中,可以避免这种情况。这句话:

if [[ "$var" -eq 1 ]]
...

扩展为:

if [[ "" -eq 1 ]]
...

现在if语句有足够的参数(第一个是空字符串)来解析。