0

このスクリプトに変数を追加する方法を教えてください、誰か知っていますか?皆さん、ありがとうございました。

#!/bin/bash

ARROW_UP=???    # I do not know
ARROW_DOWN=???  # I do not know
ARROW_LEFT=???  # I do not know
ARROW_RIGHT=??? # I do not know
ARROW_ENTER=??? # I do not know

case "$KEY" in "$ARROW_UP")    echo "press the up arrow key"
               "$ARROW_DOWN")  echo "press the down arrow key";;
               "$ARROW_LEFT")  echo "press the left arrow key"
               "$ARROW_RIGHT") echo "press the right arrow key"
               "$ARROW_ENTER") echo "press the enter key"
esac
4

2 に答える 2

2

次のようなものを試してください(ループから抜け出すためにケースを追加することをお勧めします):

#!/bin/bash

# Reset terminal to current state when we exit.
trap "stty $(stty -g)" EXIT

# Disable echo and special characters, set input timeout to 0.2 seconds.
stty -echo -icanon time 2 || exit $?

# String containing all keypresses.
KEYS=""

# Set field separator to BEL (should not occur in keypresses)
IFS=$'\a'

# Input loop.
while [ 1 ]; do

    # Read more input from keyboard when necessary.
    while read -t 0 ; do
        read -s -r -d "" -N 1 -t 0.2 CHAR && KEYS="$KEYS$CHAR" || break
    done

    # If no keys to process, wait 0.05 seconds and retry.
    if [ -z "$KEYS" ]; then
        sleep 0.05
        continue
    fi

    # Check the first (next) keypress in the buffer.
    case "$KEYS" in
      $'\x1B\x5B\x41'*) # Up
        KEYS="${KEYS##???}"
        echo "Up"
        ;;
      $'\x1B\x5B\x42'*) # Down
        KEYS="${KEYS##???}"
        echo "Down"
        ;;
      $'\x1B\x5B\x44'*) # Left
        KEYS="${KEYS##???}"
        echo "Left"
        ;;
      $'\x1B\x5B\x43'*) # Right
        KEYS="${KEYS##???}"
        echo "Right"
        ;;          
    esac
done

詳細はこちら

于 2012-10-24T12:30:56.797 に答える
2

簡単な答えはあなたができないということです。実際のプログラミング言語を使用してください。

いくつかの非常に複雑な解決策がここにありますが、私はそれらを推奨しません。同じページの下部にあるKEYBDトラップソリューションは優れていますが、ksh93が必要です。

于 2012-10-24T12:33:08.103 に答える