Caseステートメントでキャリッジリターン/ラインフィードをキャプチャする方法

Caseステートメントでキャリッジリターン/ラインフィードをキャプチャする方法

成功せず、次を試しましたが、ドキュメントが見つかりませんでした。

read Option
case $Option in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac

ただし、次の方法が機能します。

$ x="                                         
> "
$ if [ "$x" = $'\n' ]; then echo "newline"; fi
newline

答え1

改行なしで入力の1行だけを読み取るので、空の文字列readだけを確認したいと思います。

read Option
case $Option in
    1 ) echo "1" ;;
    2 ) echo "2" ;;
    "" ) echo "LF" ;;
    0 ) exit ;;
    * ) echo "Invalid input" ;;
esac

[1]1他の単一文字クラスと同様に)同じ文字列をパターンと一致させます。

答え2

readはがします。ケースステートメント自体が有効です。

#read Option
Option='
'
case "$Option" in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac
#Outputs: LF

答え3

case外部プログラム(例:sed

以下の例では、すべてのスペースと印刷できない文字はスペースと同じように無効であるため、すべてリテラル ""に置き換えました。

case "${Option//[^[:print:]]/ }" in
*\ *)
    # Handle error
    ;;
...
esac

関連情報