我想根据用户输入重复文本

我想根据用户输入重复文本

有一个问题让我很困惑。我有一个名为filex.txt

$ cat filex.txt
I love my India.

我希望它通过获取用户的输入来多次打印。下面显示了一个示例,其中我尝试默默地重复文本 30 次,并将其放入单独的文本文件中。

echo "Number of times you want to repeat:"
read repeat # for example user entered 30
cat link_no_follow.txt | perl -ne 'for$i(0..$repeat){print}' >filex2.txt

我使用一个变量$repeat来存储用户输入。但这不起作用。有人可以给我一个解决方案吗?

答案1

您实际上不需要使用perlfor 循环,您可以使用 bash 目录。考虑以下示例:

#!/bin/bash

content="$(cat filex.txt)"

echo -n "Number of times you want to repeat: "
read repeat

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

该脚本首先将 的内容读filex.txt入名为 的变量中content。然后它会提示输入重复次数并将其从用户处读取到变量中repeat

接下来,它使用for循环来打印content repeat次数。循环for的结构是:

for ((init; condition; update))

init部分在循环开始时执行一次,然后condition评估该部分。如果为 true,则执行循环。一旦循环完成,它就会执行该update部分。接下来是重新评估状况。一直持续到条件为假为止。 ++i是 的简写i = i + 1

运行该脚本,我得到:

$ ./ex.sh
Number of times you want to repeat: 3
I love my India.
I love my India.
I love my India.

答案2

你的 shell 变量repeat在单引号 perl 表达式中是不可见的。

如果你真的想使用 perl 来做这件事,你可以这样做

$ repeat=3
$ 
$ perl -ne 'BEGIN{$repeat = shift} print $_ x $repeat' "$repeat" filex.txt 
I love my India.
I love my India.
I love my India.

它使用 perl 参数向量(隐式地,via shift)来传递 shell 变量的值repeat并将其分配给 perl 变量$repeat。请注意,如果filex.txt包含多行,则这将$repeat依次重复每行一次。

答案3

您已经知道如何提示和读取repeat变量,因此假设它的值为 5:

$ seq "$repeat" | xargs -I{} cat filex.txt
I love my India.
I love my India.
I love my India.
I love my India.
I love my India.

相关内容