[英]How to read just a single character in shell script
我想要像 C 中的getche()
類似的選項。如何從命令行讀取單個字符輸入?
使用read
命令可以嗎?
在 bash 中, read
可以做到:
read -n1 ans
read -n1
適用於 bash
stty raw
模式會阻止 ctrl-c 工作,並且會使您陷入輸入循環而無路可走。 手冊頁還說stty -raw
不能保證將您的終端返回到相同的狀態。
因此,基於dtmilano 的答案使用stty -icanon -echo
可以避免這些問題。
#/bin/ksh
## /bin/{ksh,sh,zsh,...}
# read_char var
read_char() {
stty -icanon -echo
eval "$1=\$(dd bs=1 count=1 2>/dev/null)"
stty icanon echo
}
read_char char
echo "got $char"
在 ksh 中,您基本上可以執行以下操作:
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
有些人的意思是“從命令行輸入”是一個給命令的參數,而不是從標准輸入讀取……所以請不要射擊我。 但是我也有一個(可能不是最復雜的)STDIN 解決方案!
使用 bash 並將數據保存在變量中時,您可以使用參數擴展
${parameter:offset:length}
當然,您可以在給定的參數( $1
、 $2
、 $3
等)上執行該操作
腳本
#!/usr/bin/env bash
testdata1="1234"
testdata2="abcd"
echo ${testdata1:0:1}
echo ${testdata2:0:1}
echo ${1:0:1} # argument #1 from command line
執行
$ ./test.sh foo
1
a
f
腳本
#!/usr/bin/env bash
echo please type in your message:
read message
echo 1st char: ${message:0:1}
執行
$ ./test.sh
please type in your message:
Foo
1st char: F
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.