我尝试了以下方法,但没有成功,也找不到任何文档。
read Option
case $Option in
[1] ) echo "1" ;;
[2] ) echo "2" ;;
[$'\n'] ) echo "LF" ;;
[0] ) exit ;;
* ) echo "Invalid input" ;;
esac
但以下方法有效。
$ x="
> "
$ if [ "$x" = $'\n' ]; then echo "newline"; fi
newline
答案1
由于read
只读取单行输入,没有换行符,因此您只想检查空字符串:
read Option
case $Option in
1 ) echo "1" ;;
2 ) echo "2" ;;
"" ) echo "LF" ;;
0 ) exit ;;
* ) echo "Invalid input" ;;
esac
[1]
和1
(对于其他单字符类也类似)将相同的字符串与模式匹配。
答案2
read
将剥离它。案例陈述本身有效。
#read Option
Option='
'
case "$Option" in
[1] ) echo "1" ;;
[2] ) echo "2" ;;
[$'\n'] ) echo "LF" ;;
[0] ) exit ;;
* ) echo "Invalid input" ;;
esac
#Outputs: LF
答案3
尽管我仍然无法找到如何case
直接捕获实际的换行符,以下调用外部程序(如sed
)。
在下面的示例中,所有空格和不可打印字符都是无效的(空格也是如此),因此我将它们全部替换为文字“”:
case "${Option//[^[:print:]]/ }" in
*\ *)
# Handle error
;;
...
esac