(bash|zsh) read command

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 も同じだ。