/d">

[20250527]bash shell编程变量作用域问题.txt

来源:这里教程网 时间:2026-03-03 21:59:35 作者:

[20250527]bash shell编程变量作用域问题.txt --//无聊,写一个计算24点的小程序,使用bash shell编程遇到变量作用域问题,通过一个简单例子说明问题。 $ cat e4.sh #! /bin/bash result='bad' echo "$1 $2 $3 $4 * * * pq" | while read line do    res=$(echo "$line " | dc 2>/dev/null)    if [ $res =  '24'  ]    then        echo "method 1 : $line ok"        result='ok'        exit 1    fi done if [ ${result} = 'ok' ] then     exit 0 else     echo "$1 $2 $3 $4 bad" fi --//如果我带入参数为 1 2 3 4,这样结果等于24,应该输出结果后马上返回。 --//而实际的情况是。 $ . e4.sh 1 2 3 4 method 1 : 1 2 3 4 * * * pq ok 1 2 3 4 bad --//而且成功后result已经赋值ok了。但是下面的if判断语句还是执行echo "$1 $2 $3 $4 bad"。 --//赋值在管道里面操作,估计退出失效,应该在这个之外赋值。 --//而且管道里面exit退出了,实际上程序还是继续运行下去执行后面的代码。 $ cat e4.sh #! /bin/bash result='bad' echo "$1 $2 $3 $4 * * * pq" | while read line do    res=$(echo "$line " | dc 2>/dev/null)    if [ $res =  '24'  ]    then        echo "method 1 : $line ok"    #   result='ok'            exit 1    fi done || result='ok' if [ $result = 'ok' ] then         exit 0 else         echo "$1 $2 $3 $4 bad" fi $ ./e4.sh 1 2 3 4 method 1 : 1 2 3 4 * * * pq ok $ ./e4.sh 1 2 3 5 1 2 3 5 bad --//也可以修改如下: $ cat e4.sh #! /bin/bash result='bad' #echo "$1 $2 $3 $4 * * * pq" | while read line for line in "$(echo "$1 $2 $3 $4 * * * pq")" do    res=$(echo "$line " | dc 2>/dev/null)    if [ $res =  '24'  ]    then        echo "method 1 : $line ok"       result='ok'       break #     exit 1    fi done if [ $result = 'ok' ] then         exit 0 else         echo "$1 $2 $3 $4 bad" fi --//也可以这样修改:  $ cat e5.sh #! /bin/bash echo "$1 $2 $3 $4 * * * pq" | while read line #for line in "$(echo "$1 $2 $3 $4 * * * pq")" do    res=$(echo "$line " | dc 2>/dev/null)    if [ $res =  '24'  ]    then        echo "method 1 : $line ok"        exit 1    fi done && echo "$1 $2 $3 $4 bad" --//如果等于24,返回码1,这样后面的echo "$1 $2 $3 $4 bad"不会执行。 --//管道里面的赋值如何保存,我自己也不是很清楚,查询许多链接,好像不行。 --//比较科学的写法如下,如果信息在文件里面。 #! /bin/bash result='bad' while read line do    res=$(echo "$line " | dc 2>/dev/null)    if [ $res =  '24'  ]    then        echo "method 1 : $line ok"       result='ok'       break #     exit 1    fi done < input.txt if [ $result = 'ok' ] then         exit 0 else         echo "$1 $2 $3 $4 bad" fi

相关推荐