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