मैं तुलना करने के लिए के साथ अपने इनपुट दर्ज/वापसी कुंजी की आवश्यकता ...बैश शेल पटकथा - वापसी कुंजी/कुंजी दर्ज
read -n1 key
if [ $key == "\n" ]
echo "@@@"
fi
लेकिन यह काम नहीं कर रहा है .. क्या इस कोड के साथ गलत है
मैं तुलना करने के लिए के साथ अपने इनपुट दर्ज/वापसी कुंजी की आवश्यकता ...बैश शेल पटकथा - वापसी कुंजी/कुंजी दर्ज
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
यह भी, अच्छा विचार तुलना करने से पहले खाली $ आईएफएस (आंतरिक क्षेत्र विभाजक) को परिभाषित करने के लिए है क्योंकि अन्यथा आप के साथ "और" \ 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--)); printf "\ r $ i सेकंड में शुरू हो रहा है ..." read -n 1 -t 1 कुंजी यदि ["$ key" = $ '\ e']; तो गूंज "यह ESC है" तोड़ elif [ "$ कुंजी" == ""], तो गूंज -e "\ n अंतरिक्ष दबाया जाता है" तोड़ फाई शायद –
किया बात इनलाइन वाक्य रचना के लिए वह यह है कि आपको आईएफएस = का उपयोग करना चाहिए; गूंज ... (अर्धविराम के साथ) – tsds
मैं सिर्फ संदर्भ के लिए नीचे दिए गए कोड जोड़ रहा है, तो कोई उलटी गिनती पाश युक्त इस तरह के समाधान का उपयोग करना चाहते हैं।
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
आप "अगर" और "गूंज" के बीच की रेखा पर "फिर" गायब हैं। एकमात्र समस्या नहीं है, लेकिन एक – Phil