繁体   English   中英

bash /循环后变量值为空

[英]bash / Variable value is empty after the loop

我是bash的新手,尝试一个简单的循环,但是变量之后它的值丢失了,我无法理解为什么-我看过几个类似的问题,但它们都与while循环的子shell执行有关。 我没有做,但仍然面临问题-有人可以向我解释我的错误在哪里吗?

#!/bin/bash

check_ss ()    
{    

command_list | awk '{print $1 $9}' > ss.out    

 for i in {1..8}    
            do grep -Pa "\x3$i" ss.out > ss$i.out   
                    if grep -w "NotStarted" ss$i.out   
                            then   
                                   ss$i=0   
                            else    
                                ss$i=1    
                    fi   
done   
}   
check_ss      
echo $ss1     
echo $ss2    
echo $ss3    
echo $ss4    

我在执行时得到这个:

[root@lubo ~]# ./ss.sh    
./ss.sh: line 21: ss1=1: command not found     
./ss.sh: line 21: ss2=1: command not found      
./ss.sh: line 21: ss3=1: command not found      
./ss.sh: line 21: ss4=1: command not found      
./ss.sh: line 21: ss5=1: command not found      
./ss.sh: line 21: ss6=1: command not found     
./ss.sh: line 21: ss7=1: command not found     
./ss.sh: line 21: ss8=1: command not found   

提前致谢

您需要使用declare来动态构造变量名。

declare "ss$i=0"

数组将是动态变量名的更好替代方案。

check_ss() {
    ss=()
    command_list | awk '{print $1 $9}' > ss.out

    for i in {1..8}; do
        grep -Pa "\x3$i" ss.out > ss$i.out
        if grep -w "NotStarted" ss$i.out; then
            ss[$i]=0
        else
            ss[$i]=1
        fi
    done
}

check_ss      
echo ${ss[1]}
echo ${ss[2]}
echo ${ss[3]}
echo ${ss[4]}

您还可以摆脱临时文件。

check_ss() {
    ss=()
    command_list | awk '{print $1 $9}' > ss.out

    for i in {1..8}; do
        if grep -Pa "\x3$i" ss.out | grep -w "NotStarted"; then
            ss[$i]=0
        else
            ss[$i]=1
        fi
    done
}

我不知道您输入的内容到底是什么样子,但您甚至可以进一步简化为:

check_ss() {
    ss=()
    while read i; do
        ss[$i]=1
    done < <(command_list | awk '$9=="NotStarted" {print $1}')
}

或者,如果您只想要未开始编号的列表,

ss=(command_list | awk '$9=="NotStarted" {print $1}')
echo "${ss[@]}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM