私はこのフラグメントを持っています:その背後にあるロジックは、ユーザーが-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つの単語を読み取るには、read
2つの変数を使用します。
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].*
"(正規表現と同じ).