2番目のパラメータワードをユーザー入力に渡す方法

2番目のパラメータワードをユーザー入力に渡す方法

私はこのフラグメントを持っています:その背後にあるロジックは、ユーザーが-sの後に単語(-sdogなど)を入力したいということです。しかし、これはうまくいきません。

read -rp 'choose: ' choice 
case $choice in 
     -a) echo you chose a;;
     -s [a-z]+) echo you chose the word ${choice#"-s "};;
esac

とても感謝しています! ! !

ベストアンサー1

を使用して2つの単語を読み取るには、read2つの変数を使用します。

read -r -p 'Enter "-a" or "-s <word>": ' opt word
case $opt in
    -a)
        echo 'You picked "-a"'
        ;;
    -s) 
        printf 'You picked "-s" with the word "%s"\n' "$word"
        ;;
    *)
        echo 'You picked neither "-a" nor "-s <word>"'
esac

コードが機能しない理由は、拡張正規表現をパターン(-s [a-z]+)として使用しているためです。このステートメントで使用されるパターンは、ファイル名のcaseワイルドカードパターンです。それらは似ていますが、同じではありません。ワイルドカードパターンは、正規表現パターンで使用されているのと同じタイプの「反復修飾子」()を受け入れません+

ワイルドカードパターンを使用するには、を使用できます'-s '[a-z]*。つまり、「文字列-s の後に小文字を使用して、^-s [a-z].*"(正規表現と同じ).

おすすめ記事