변수에 저장할 때 printf에서 너비 형식을 유지하는 방법은 무엇입니까?

변수에 저장할 때 printf에서 너비 형식을 유지하는 방법은 무엇입니까?

다음 코드가 있습니다

printf "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

그러면 예상되는 출력이 생성됩니다.

   24756.22971
    9910.13045
    7701.30924
   22972.27622

아래와 같이 나중에 사용할 수 있도록 변수의 선행 공백과 함께 이 출력을 저장하고 싶습니다.

printf -v output "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

그러나 $output 변수를 인쇄/에코하려고 하면 선행 공백이 사라집니다.

24756.22971
9910.13045
7701.30924
22972.27622

답변1

output다음 과 같은 따옴표 없이 변수를 사용하고 있는 것 같습니다 .

printf '%s\n' $output

이렇게 하면 쉘이 변수의 문자열을 공백(기본적으로 공백, 탭 및 줄 바꿈)으로 분할합니다. 즉, 선행 들여쓰기를 제거합니다. printf형식 문자열이 각 단어에 재사용되기 때문에 여전히 4줄의 출력을 얻을 수 있습니다.

를 사용하면 echo $output한 줄에 데이터를 얻을 수 있습니다. 왜냐하면 echo매개변수 사이에 공백이 있는 각 매개변수(문자열의 단어 분할)를 출력하기 때문입니다.

대신 확장을 큰따옴표로 묶어야 합니다 $output.

printf '%s' "$output"

(형식 문자열을 여기에 넣지 않았습니다. \n왜냐하면 문자열이 이미 개행 문자로 끝나기 때문에 문자열 끝에 빈 줄이 출력되기 때문입니다.)

또한보십시오:

관련 정보