gpt4 book ai didi

linux - shell脚本中的重复变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:41 26 4
gpt4 key购买 nike

我应该先说我以前从未使用过 shell 脚本,所以这对我来说是全新的。我能够做出一些有用的东西,但优化得非常厉害,而且我不知道如何改进它。如果有的话,这是一个非常搞笑的脚本:

#/bin/bash

get_char() {
old_tty_settings=`stty -g`
stty -icanon min 0 time 1
stty cbreak
grabbed_char=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
stty -cbreak
stty "$old_tty_settings"
}

while true; do

unset char00
unset char01
unset char02
unset char03
unset char04
unset char05

echo -e "\nWaiting for keystroke..."
read -n 1 char00

while true; do

get_char; char01=$grabbed_char

if [ "$char01" != "" ]; then get_char; char02=$grabbed_char
else break
fi
if [ "$char02" != "" ]; then get_char; char03=$grabbed_char
else break
fi
if [ "$char03" != "" ]; then get_char; char04=$grabbed_char
else break
fi
if [ "$char04" != "" ]; then get_char; char05=$grabbed_char
else break
fi

done

fullstring=$char00$char01$char02$char03$char04$char05
echo -e "\nFULLSTRING: !$fullstring!"

done

列表要长很多,但我饶了你。

基本上,程序需要永远坐在终端中等待击键。在初始击键之后,它需要等待很短的时间(在本例中为 1/10 秒)以等待下一次击键。如果在短时间内没有记录击键,它会回显输出(将通过 sed 命令进行管道传输),然后重新启动。

它旨在与条形码扫描器一起使用,您可以在其中扫描 4 个字符或 100 个字符。我们希望尽快处理数据,这意味着我们不希望扫描后有 1 秒的延迟。

一个好的解决方案是,如果“charXX”可以在接收到字符时创建。感谢您的帮助。

最佳答案

用这个替换你的内心会做你想做的事吗?

read -n 1 fullstring

while true; do
get_char
if [ -n "$grabbed_char" ] ; then
fullstring="$fullstring$grabbed_char"
else
break
fi
done
echo -e "\nFULLSTRING: !$fullstring!"

顺便说一句,在 [...] 不是内置的旧 shell 上,用这个替换 if 会运行得更快:

case "$grabbed_char" in
"") break ;;
*) fullstring="$fullstring$grabbed_char" ;;
esac

关于linux - shell脚本中的重复变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506638/

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