zsh と bash の read コマンドは全然違うようだ。
bash, zshでyes/no判定をするワンライナー – Qiita
公式のビルトインコマンド man ページも見つけた。
zsh: 17 Shell Builtin Commands
早速試そうと思ったけど bash とソースを分けるのは色々と不便だ。
zsh にしても $SHELL は bash のままだし、readonly に何か無いかな?
あった、$ZSH_EVAL_CONTEXT が定義されているかで判別できそう。
プロンプトとライン入出力と Y|N 判定をひとまとめに書いてみた。
#!/bin/zsh echo 'May I ask your name?' if [[ $ZSH_EVAL_CONTEXT = toplevel ]]; then read name\?'> ' echo "Hello $name san" printf 'Do you like zsh? (y|N): ' read -q && echo '\nGreat!' || echo '\noh my god...' else read -p '> ' name echo "Hello $name san!" read -n1 -p 'Do you like bash? (y|N): ' res [[ $res = [Yy] ]] && printf '\nGreat!\n' || printf '\noh my god...\n' fi
マジで全然ちげえ、この手段でまとめページを作るのは無理があるみたい。
zsh の read -q でプロンプトは出せないのかな?
おまけで、zsh の echo はエスケープシーケンスが使えると解った。
macOS の bash は echo -e すら使えないのに。
組み込みコマンドは大体別物と思ったほうが良さげ。
Atom の script は bash|zsh のシバンも見分けしてくれる、助かる。
入力はできないけど、まあそれは Gedit も同じだ。