gpt4 book ai didi

linux - 使用陷阱将值设置为 var

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:38 25 4
gpt4 key购买 nike

我在大学里有任务

你能帮帮我吗?

我需要改变使用trap的方法并使用 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

我的hundler代码:

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="*"} 不工作

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

最佳答案

这一行是问题所在:

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

关于linux - 使用陷阱将值设置为 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com