有一个问题让我很困惑。我有一个名为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
您实际上不需要使用perl
for 循环,您可以使用 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.