我需要比較我與輸入回車/返回關鍵...的Bash shell腳本 - 返回鍵/回車鍵
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
但是這是行不通的。什麼是不對的代碼
我需要比較我與輸入回車/返回關鍵...的Bash shell腳本 - 返回鍵/回車鍵
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
但是這是行不通的。什麼是不對的代碼
發佈代碼的幾個問題。行內註釋詳細解決什麼:
#!/bin/bash
# ^^ Bash, not sh, must be used for read options
read -s -n 1 key # -s: do not echo input character. -n 1: read only 1 character (separate with space)
# double brackets to test, single equals sign, empty string for just 'enter' in this case...
# if [[ ... ]] is followed by semicolon and 'then' keyword
if [[ $key = "" ]]; then
echo 'You pressed enter!'
else
echo "You pressed '$key'"
fi
read
從標準輸入讀取一行,直到但不包括行尾的新行。 -n
指定最大字符數,如果達到該字符數,則迫使read
提前返回。它仍然會提前結束,但當返回鍵被按下時。在這種情況下,它返回一個空字符串 - 一切都達到但不包括返回鍵。
您需要與空字符串進行比較以判斷用戶是否立即按下返回。
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi
此外,它是不錯的主意定義進行比較之前空$ IFS(內部字段分隔符),否則你可以有「」,「\ n」等於結束。
因此,代碼應該是這樣的:
# for distinguishing " ", "\t" from "\n"
IFS=
read -n 1 key
if [ "$key" = "" ]; then
echo "This was really Enter, not space, tab or something else"
fi
#這對我來說不起作用,如果使用循環打印coutdown IFS = echo -e「按[ENTER]鍵盤配置。」 ((i = 10; i> 0; i--))的 ; do printf「\ r以$ i秒開始...」 已讀-n 1 -t 1鍵 if [「$ key」= $'\ e'];然後 回聲「這是ESC」 破 的elif [「$鍵」 ==「」;然後 回聲-e「\ n空格鍵被按下」 破 網絡 做 – 2016-04-25 13:34:47
也許事情是,內聯語法你應該使用IFS =;回聲...(用分號) – tsds 2016-04-25 14:39:35
我添加以下代碼僅供參考,如果有人想使用含倒計時循環等解決方案。
IFS=''
echo -e "Press [ENTER] to start Configuration..."
for ((i=10; i>0; i--)); do
printf "\rStarting in $i seconds..."
read -s -N 1 -t 1 key
if [ "$key" = $'\e' ]; then
echo -e "\n [ESC] Pressed"
break
elif [ "$key" == $'\x0a' ] ;then
echo -e "\n [Enter] Pressed"
break
fi
done
您在「if」和「echo」之間的線上缺少「then」。不是唯一的問題,但一個 – Phil 2010-04-10 04:56:12