Linux Bash,如何检查变量中的控制字符(不可打印字符)?
我有一个Bash语句,可以让用户将单个字符输入到tmpchar中: 我可以像这样检查可打印字符输入:Linux Bash,如何检查变量中的控制字符(不可打印字符)?,linux,bash,Linux,Bash,我有一个Bash语句,可以让用户将单个字符输入到tmpchar中: 我可以像这样检查可打印字符输入: if [ "$tmpchar" = "n" ] || [ "$tmpchar" = "N" ]; then # do something... fi 现在我的问题是:如果用户输入的只是一个回车,或者ESC,或者Ctrl+a,Ctrl+b等等,我如何检查它们 ENV:opensuse12.3,bash4.2.421-release也许您正在寻找。例如,Ctrl-a表示为$'\ca.使用正则表
if [ "$tmpchar" = "n" ] || [ "$tmpchar" = "N" ]; then
# do something...
fi
现在我的问题是:如果用户输入的只是一个回车,或者ESC,或者Ctrl+a,Ctrl+b等等,我如何检查它们
ENV:opensuse12.3,bash4.2.421-release也许您正在寻找。例如,Ctrl-a表示为$'\ca.使用正则表达式匹配运算符=~在[…]内: 请注意,read-n1不会像您期望的那样处理各种特殊字符。至少,您应该使用:
IFS= read -r -n1
即使这样,您也不会看到换行符:如果键入换行符,read会将reply变量设置为空字符串。您可以使用tr过滤输入:
如果要知道某个字符是否不是可打印字符集的成员,请使用补充集表达式。这似乎适用于以下情况: 输出可打印和不可打印
同样有效。如果您想知道您的系统支持哪些字符集,请查看linux上的man 7 regex或OS X上的man 7 re_格式。我发现了一个检查唯一返回输入的技巧
if [ "$tmpchar" = "$(echo -e '')" ]; then
echo "You just pressed Return."
fi
换言之,@ooga高度期待的方式
if [ "$tmpchar" = $'\x0a' ]; then
echo "You just pressed Return." # Oops!
fi
无论如何都不适合退货,很难解释。这正是我要找的。
read -n 1 -t 1 tmpchar
clean=$(tr -cd '[:print:]' <<< $tmpchar)
if [ -z "$clean"]; then
echo "No printable"
else
echo "$clean"
fi
for c in $'\x20' $'\x19'; do
case "$c" in
[[:print:]]) echo printable;;
[^[:print:]]) echo 'not printable';;
*) echo 'more than one character?';;
esac
done
for c in $'\x20' $'\x19'; do
if [[ $c = [[:print:]] ]]; then
echo printable
fi
if [[ $c = [^[:print:]] ]]; then
echo not printable
fi
done
if [ "$tmpchar" = "$(echo -e '')" ]; then
echo "You just pressed Return."
fi
if [ "$tmpchar" = $'\x0a' ]; then
echo "You just pressed Return." # Oops!
fi