Tôi cần phải so sánh đầu vào của tôi với Nhập/Return chìa khóa ...Bash Shell Scripting - chìa khóa trở lại/phím Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Nhưng đây không phải đang làm việc .. Điều gì là sai với mã này
Tôi cần phải so sánh đầu vào của tôi với Nhập/Return chìa khóa ...Bash Shell Scripting - chìa khóa trở lại/phím Enter
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
Nhưng đây không phải đang làm việc .. Điều gì là sai với mã này
Một số vấn đề với mã đã đăng. bình luận Inline chi tiết những gì để sửa chữa:
#!/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
đọc một dòng từ đầu vào tiêu chuẩn, nhưng không bao gồm dòng mới ở cuối dòng. -n
chỉ định số ký tự tối đa, buộc read
trả lại sớm nếu bạn đạt đến số ký tự đó. Tuy nhiên, nó sẽ vẫn kết thúc sớm hơn khi nhấn phím Quay lại. Trong trường hợp này, nó trả về một chuỗi rỗng - mọi thứ có thể nhưng không bao gồm phím Trả về.
Bạn cần so sánh với chuỗi trống để cho biết liệu người dùng có ngay lập tức nhấn Trả lại hay không.
read -n1 KEY
if [[ "$KEY" == "" ]]
then
echo "@@@";
fi
Ngoài ra nó là ý tưởng tốt để xác định IFS $ rỗng (tách lĩnh vực nội bộ) trước khi đưa ra so sánh, bởi vì nếu không bạn có thể kết thúc với "" và "\ n" là như nhau.
Vì vậy, các mã nên trông như thế này:
# 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
# điều này không hoạt động đối với tôi nếu sử dụng coutdown in vòng lặp IFS = echo -e "Nhấn [ENTER] Cho Cấu hình Bàn phím." cho ((i = 10; i> 0; i--)); làm printf "\ rBắt đầu sau $ i giây ..." đọc -n 1 -t 1 khóa nếu ["$ key" = $ '\ e']; sau đó echo "Đây là ESC" nghỉ elif [ "$ key" == ""]; sau đó vang -e "\ n gian được nhấn" nghỉ fi làm –
có lẽ điều này là cho các cú pháp inline bạn nên sử dụng IFS =; echo ... (với dấu chấm phẩy) – tsds
tôi thêm mã dưới đây chỉ để tham khảo nếu ai đó sẽ muốn sử dụng giải pháp như vậy có chứa vòng lặp đếm ngược.
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
Bạn đang thiếu "then" trên dòng giữa "if" và "echo". Không phải là vấn đề duy nhất, nhưng một số – Phil