入力をEnter/Returnキーと比較する必要があります...
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
しかし、これは機能していません..このコードの何が問題なのですか
入力をEnter/Returnキーと比較する必要があります...
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
また、比較を行う前に空の $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
誰かがカウントダウンループを含むそのようなソリューションを使用したい場合は、参考のために以下のコードを追加しています。
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
read
標準入力から、行末の改行まで (改行は含まない) 行を読み取ります。 -n
最大文字数を指定し、read
その文字数に達した場合は強制的に早く戻ります。ただし、Returnキーが押されると、それはまだ早く終了します。この場合、空の文字列を返します-キーまでのすべてが含まれますが、Returnキーは含まれません。
ユーザーがすぐに を押したかどうかを確認するには、空の文字列と比較する必要がありますReturn。
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi