私のbashスクリプトでは、y/nの回答を求めるプロンプトが表示されることがよくあります。私はこのスクリプトを1回のスクリプトで何度も使用することが多いので、ユーザーの入力がYes/Noの変種であるかどうかをチェックし、この答えを "y"または "n"にクリーンアップする関数を用意したいと考えています。このような何か:引数で指定された変数をbash関数に変更します。
yesno(){
temp=""
if [[ "$1" =~ ^([Yy](es|ES)?|[Nn][Oo]?)$ ]] ; then
temp=$(echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/es//g' | sed 's/no//g')
break
else
echo "$1 is not a valid answer."
fi
}
私は、次のように機能を使用したい:
while read -p "Do you want to do this? " confirm; do # Here the user types "YES"
yesno $confirm
done
if [[ $confirm == "y" ]]; then
[do something]
fi
ときように基本的に、私は、$confirm
の値の最初の引数の値を変更したいです私はyesno
関数を終了し、$confirm
は "y"または "n"のいずれかです。
機能内でset -- "$temp"
を使ってみましたが、動作させることができません。
これは非常に多くのX-Y質問です。問題は解決策を使用したいという問題とは対照的に、提案された解決策に関する質問です。受け入れられた答えは外部スコープ内で '' $ 1 ''を変更しないので、検索結果としてそれを見つけた他の人は混乱する可能性があります - 実際の/直近の問題をより詳しく記述するために質問を編集するべきでしょう? –
...元のタイトルに基づいて、OPは* $ 1の内容で指定された変数*の値ではなく、 '$ 1'自体を変更する方法を知りたかったと思っていたでしょう。 –