以下脚本可以捕获4个箭头键:
#!/usr/bin/env bash
while true; do
read -n 3 c
case "$c" in
$'\033[A')
printf "\t up \n"
;;
$'\033[B')
printf "\t down \n"
;;
$'\033[D')
printf "\t left \n"
;;
$'\033[C')
printf "\t right \n"
;;
*)
if [[ $c == "" ]]
then
printf "\t enter \n"
fi
exit
;;
esac
done
我从Input Translation和n获得了箭头键的字符序列。
在脚本中, Enter 以不同的方式捕获。可以通过箭头键的类似方式捕获 Enter 吗?
以下代码可以不正常工作:
#!/usr/bin/env bash
while true; do
read -n 1 c
case "$c" in
$'\n')
printf "\t enter \n"
;;
*)
exit
;;
esac
done
我找到了正确的方法:
#!/usr/bin/env bash
while true; do
read -n 3 c
case "$c" in
"")
printf "\t enter \n"
;;
*)
exit
;;
esac
done
答案 0 :(得分:0)
从上面的评论中,在case
语句中,您需要测试双引号empty-string
所代表的""
。这将匹配某人输入任何内容,只需按 Enter 键即可。这是一个简短的例子:
#!/bin/bash
read -r ans
case "$ans" in
"" )
printf "[Enter] - empty string found\n";;
* )
printf "missed enter.\n";;
esac
exit 0
使用/输出强>
$ bash readrtn.sh
[Enter] - empty string found
$ bash readrtn.sh
anything
missed enter.