根据用户输入重复 OS X

根据用户输入重复 OS X

我正在创建一个脚本,要求用户输入一条消息,然后他们想要显示该消息多少次。

这是我到目前为止所拥有的。

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}

由于这是 shell 执行某些操作的顺序问题,因此没有解决方法。您根本不能在大括号扩展中以这种方式使用变量。你必须找到一种不同的方法来做到这一点。例如,使用seq

for i in $(seq 1 "$REPEAT"); do
    echo "${MESSAGE}"
done

或者:

for((i=0;i<=$REPEAT;i++)); do 
    echo "${MESSAGE}"
done

相关内容