我试图在用户不按“返回”键的情况下捕获箭头键。除了我尝试捕捉“esc”键之外,该程序正常工作。我尝试使用我能想到的一切进行比较,但没有成功。包括字符串和数字比较;带引号和不带引号;单括号与双括号等。shellcheck 不会报告任何问题。
要么什么也没有发生(esc 键没有被捕获),要么出现语法错误; “./key-no-return-printf.sh:第37行:[[:':语法错误:需要操作数(错误标记为“'”)”
即$VALUE -eq 27、$VALUE == 27、$VALUE = 27、"$VALUE" -eq "27" 等
#! /usr/bin/bash
clear
function getkey () {
read -rs -n1 -t.001 KEYIN # read 1 chr, no echo, no delay
VALUE=\'$KEYIN
if [[ $VALUE -eq 27 ]]; then # trap esc key
printf "esc caught\n"
fi
}
while :; do # --- Infinite loop ---
KEYIN=""
VALUE=0
getkey
if [[ $KEYIN == [Qq] ]]; then exit; fi
if [[ $KEYIN != "" ]]; then printf "%s : %d\n" "$KEYIN" "$VALUE"; fi
done
使用不同的方式获取密钥代码对我有用:
VALUE=$(printf %d "'$KEYIN")
if [[ $VALUE -eq 27 ]]; then # trap esc key
printf "esc caught\n"
fi