이 Ceaser Cipher 코드를 설명할 수 있는 사람이 있나요?

이 Ceaser Cipher 코드를 설명할 수 있는 사람이 있나요?

IN="MJHVIZN ZPIO YJHPN"

for I in $(seq 25); do
    echo $I $IN | tr $(printf %${I}s | tr ' ' '.')\A-Z A-ZA-Z
done

누구든지 이 코드를 설명할 수 있습니까? 이 중첩된 문 때문에 혼란스러워요

echo $I $IN | tr $(printf %${I}s | tr ' ' '.')\A-Z A-ZA-Z

답변1

에서는 printf고정 길이 필드에 문자열을 인쇄합니다.%[number]s숫자캐릭터는 넓고 공간을 채운다. 따라서 %12s12자 필드가 생성됩니다. 여기서와 같이 문자열이 비어 있으면 12개의 공백만 생성됩니다. 따라서 printf %${I}s변수 I가 지시하는 만큼의 공백이 생성된 후 점으로 변경됩니다.

I, 4다른 쪽이 tr첫 번째 인수 ....A-Z, 두 번째 인수를 가져옵니다 A-ZA-Z. 그것들을 확장하고 하나로 합치면 우리는 얻는다.

....ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

I이는 was의 값만큼 4개의 문자 이동에 해당합니다 .

답변2

파이프라인의 두 번째 명령이 무엇인지 확인할 수 있도록 에코를 추가했습니다. 이 명령의 매개변수는 를 사용하여 구성됩니다 $().

in="MJHVIZN ZPIO YJHPN"

for i in $(seq 25); do
    echo tr $(printf %${i}s | tr ' ' '.')\A-Z A-ZA-Z
done

실행한 후에는 더 의미가 있을 것입니다.

또한 변수 이름에서 대문자를 제거했습니다. 거기서 누가 가르쳤는지 모르겠어요. 소문자여야 한다는 표준이 있습니다.

관련 정보