사용자 입력에 따라 텍스트를 반복하고 싶습니다.

사용자 입력에 따라 텍스트를 반복하고 싶습니다.

나를 당황하게 만드는 질문이 있습니다. 라는 파일이 있습니다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

작은따옴표로 묶인 Perl 표현식 안에는 쉘 변수가 repeat표시되지 않습니다.

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)를 사용하여 쉘 변수의 값을 전달 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.

관련 정보