ユーザー入力-s
の後に数字が続くことを望みます(例-s 3
:)。しかし、既存の変数の隣に他の変数を渡すことはできないようです-s
。これは私のコードです。
echo choose
read choice
case $choice in
-a) echo you chose a
;;
-s $num) echo you chose the number $num #this is the -s number (e.g. -s 3) choice.
;;
esac
exit 0
答え1
現在実行中のタスクを処理するより良い方法がほとんど確実です。まず、ユーザーに入力を要求するのを避け、代わりにプログラムを実行するときにコマンドラインに引数を与えるようにする必要があります。ただし、動作するようにコードを変更する必要があります。
read -rp 'choose: ' choice
case $choice in
-a) echo 'you chose a';;
-s\ [1-4]) "echo you chose the number ${choice#"-s "}";;
esac
変数num
が設定されているように見えないため、nullに展開され、ケースパターンが単純になり、一致しません。-s )
なぜなら-s 4
…-s )
まあ、同じではないからです。そのため、-s\ [1-4])
後に数字()が付くように修正する必要があります。次に、パラメータ拡張を使用してを削除します-s
。
私が処理する方法は、getopts
次のようなものを使用することです。
#!/bin/bash
while getopts as: opt; do
case $opt in
a) printf '%s\n' 'You have chosen: a';;
s) n=$OPTARG; printf '%s: %d\n' 'You have chosen s with an argument of' "$n";;
esac
done
これにより、次のパラメータを指定してコマンドラインから実行できます。
./script.sh -s 4