고쳐 쓰다자세한 정보를 명확히 하기 위해 예제를 사용하고 다음 쉘 명령을 실행해 보십시오.
SHELLVARIABLE="1st line,
2nd line,
3rd line,
"
printf '%s' "$SHELLVARIABLE"
다음 출력을 생성합니다.
1st line,<newline>2nd line,<newline>3rd line,<newline>
<newline>
역할은 0x0a
/ 입니까 \n
?
원래 문제 설명
올바른(POSIX 확인) 저장 방법은 무엇입니까?새로운 팀문자 0x0a
(commen c 스타일 escap이라고도 함 \n
)는 셸 변수로 변환됩니다.
나는 다음을 확실히 하고 싶다:
SHELLVARIABLE="
"
예, 그것은 단순한 우연이 아니라 실제로 올바른 접근 방식입니다.
POSIX 이후인쇄 기능printf '\n'
개행 문자(예: , 또는 ) 를 완전히 생성할 수 있습니다. printf '%b' '\0012'
먼저 더 명시적인(? 또는 올바른?) 형식을 시도했습니다.
SHELLVARIABLE="$(printf '\n')"
이는 유혹적인 접근 방식이지만,아니요일하다. 에 따르면기준, 명령 대체(예: $()
및 를 통한 ` `
)를 제거해야 합니다.
하나 이상의 순서새로운 팀교체가 끝나면 s입니다.
참고: 단일 후행 개행 문자를 셸 변수에 저장해야 한다는 요구 사항은 보다 일반적인 사용 사례(답변을 구합니다)를 추상화하기 위한 것입니다. 이는 다음으로 시작하는 POSIX 셸 변수에 문자열을 저장하는 방법입니다.새로운 팀특징.
답변1
인용된 문자열에 하드 개행 문자를 사용해도 괜찮습니다.
개인적으로 나는 단지 개행 문자를 원한다면 그것을 피하고 싶습니다. 이상해 보이고 실수로 첫 번째 줄 끝에 추가 공백을 칠 위험이 약간 있습니다(예를 들어 <space><newline>
). 하지만 그게 바로 나야.
명령 대체가 제거됩니다.뒤따라줄 바꿈 문자이지만 이것만 가능합니다. 해결 방법은 마지막 문자가 개행 문자가 아닌지 확인한 다음 해당 문자를 제거하는 것입니다.
이 두 가지 모두 개행 문자를 제공해야 합니다.
nl1='
'
nl2="$(printf '\nx')"
nl2="${nl2%x}"