Cのgetche()
のような同様のオプションが必要です。コマンドラインから単一の文字入力だけを読み取るにはどうすればよいですか?
read
コマンドを使用して実行できますか?
Kshでは基本的に次のことができます。
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
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"
read -n1
入力から正確に1文字を読み取る
echo "$REPLY"
結果を画面に出力します
一部の人々は、「コマンドラインからの入力」でSTDINから読み取る代わりにコマンドに与えられた引数を意味するので、私を撃たないでください。しかし、私は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