ユーザーにメッセージを入力するように求めてから、必要なだけメッセージを表示するスクリプトを作成しています。
これが私が今まで持っているものです。
message.sh
#!/bin/bash
echo -en "Enter a message to display: "
read -r MESSAGE
echo -en "How many times would like to repeat it? "
read -r REPEAT
for i in {1.."${REPEAT}"}; do
echo "${MESSAGE}"
done
実際の出力
たとえば、私が入力した場合こんにちはメッセージと5繰り返し回数のみ表示されます。こんにちは一度だけ。
期待される出力
Hello
Hello
Hello
Hello
Hello
ユーザーの入力に応じてどのように繰り返すことができますか?
答え1
優先順位の問題です。サポート拡張評価今後変数は次のとおりです。
$ foo="10"
$ echo {1.."$foo"}
{1..10}
またはさらに詳しく説明すると、次のようになります。
$ set -x
$ echo {1.."$foo"}
+ echo '{1..10}'
{1..10}
これに関する文書は次のとおりですman bash
。
拡張順序は、中かっこ拡張、パラメータと変数拡張、算術拡張、コマンドの置換(左から右へ)です。
つまり、useを使用しようとしたときに{1..$foo}
bashが最初にすることは、中括弧拡張を評価することです。この時点で、変数はその値に置き換えられておらず、単なるものです$foo
。したがって、bashが見るものは次のとおりです{1..SOMESTRING}
。
$ echo {1..SOMESTRING}
{1..SOMESTRING}
これは、シェルが特定のタスクを実行する順序による問題であるため、回避策はありません。中括弧拡張では、このように変数を使用することはできません。別の方法を見つける必要があります。たとえば、次のようにしますseq
。
for i in $(seq 1 "$REPEAT"); do
echo "${MESSAGE}"
done
または:
for((i=0;i<=$REPEAT;i++)); do
echo "${MESSAGE}"
done