다음 코드가 있습니다
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
왜냐하면 문자열이 이미 개행 문자로 끝나기 때문에 문자열 끝에 빈 줄이 출력되기 때문입니다.)
또한보십시오: