使用陷阱将值设置为var

时间:2013-12-16 14:41:15

标签: linux bash centos

我在大学里有任务

你能帮帮我吗?

我需要改变使用陷阱的方法 并使用tail -n 0 -f

添加或相乘

我的生成器代码:

rm info.txt
touch info.txt && chmod u+x info.txt

while true;
do
    read line
    case $line in
    "quit")
        echo $line >> info.txt
        exit
    ;;
    "+")
        kill -USR1 $(cat .pid)
    ;;
    "*")
        kill -USR2 $(cat .pid)
    ;;
    *)
        echo $line >> info.txt
    ;;
    esac
done

我的亨德勒代码:

echo $$ > .pid

ME="+";
value=1;

multipl(){
    ME="*"
}
plus(){
    ME="+"
}

trap 'multipl' USR1
trap 'plus' USR2

(tail -n 0 -f info.txt) | while true
do
    read line
    case $line in
    "quit")
        echo "quit"
        killall tail
        exit
    ;;
    *)
        if (echo "$line" | grep -Eq "^-?[0-9]+$")
        then
            if [[ "$ME" == "+" ]]
            then
                let value=$value+$line
            fi
            if [[ "$ME" == "*" ]]
            then
                let value=$value*$line
            fi
            echo $value
        else
            echo "error"
            killall tail
            exit
        fi
    esac

    sleep 1
done

但我的multipl(){ME =“*”}不起作用

你对此有什么解决方案吗?

1 个答案:

答案 0 :(得分:1)

这一行是问题所在:

let value=$value*$line

因为它没有引用,*将扩展到当前目录中的文件列表 - http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

你想要这个

let "value=$value*$line"

或使用特定于bash的算术语法

(( value *= line ))

"没有工作"作为问题报告完全无用。

你是在引用" $ ME"?考虑一下:

$ ls
file1  file2  file3
$ multipl(){
   ME="*"
}
$ multipl
$ echo "$ME"
*
$ echo $ME
file1 file2 file3