문자열에 백슬래시가 있으면 printf를 사용하세요.

문자열에 백슬래시가 있으면 printf를 사용하세요.

설정에 대한 변수 printf와 변수를 모두 시도하고 있지만 시도한 모든 것이 오류를 반환 하거나 프롬프트에 텍스트를 입력합니다.exportPS1printf\u

v='\u\$'; printf "$v"; export PS1="$v"
-bash: printf: missing unicode digit for \u

v='\\u\$'; printf "$v"; export PS1="$v"
\u$

v=$'\u'; v+='\$'; printf "${v}"; export PS1="${v}"
-bash: printf: missing unicode digit for \u

두 작업을 $v모두 수행할 수 있는 형식 지정 방법이 있습니까 ?printfexport

답변1

printf첫 번째 인수의 일부 백슬래시 문자가 특수 문자로 해석되기 때문에 실패합니다 .

printf일반적으로 말하면, 힘을 사용할 때

  1. 다른 매개변수에서 얻어야 하는 데이터에 대한 자리 표시자를 포함할 수 있는 정적 형식 문자열
  2. 정적 형식 문자열의 자리 표시자에 사용되는 추가 변수 데이터입니다.

이는 첫 번째 매개변수 printf언제나작은따옴표로 묶인 문자열입니다.

%s셸에서는 왼쪽/오른쪽 패딩과 같은 것을 원하지 않는 한(예: %20s오른쪽 정렬 문자열 또는 왼쪽 정렬 문자열 문자에%-20s 20 사용) 서식이 지정된 문자열의 거의 모든 항목에 대한 자리 표시자로 사용할 수 있습니다 . 부동 소수점 숫자의 소수 자릿수( %.3f소수점 세 자리) 또는 정수의 제로 패딩( %08d소수점 여덟 자리) 등

예를 들어, 문자열을 인쇄하려면 %s형식 문자열 내에서 다음을 사용하십시오.

v='\u\$'
printf 'PS1 will be set to "%s"\n' "$v"   # or just:  printf '%s\n' "$v"
PS1="$v"

또는

PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1"   # or just:  printf '%s\n' "$PS1"

이것은 출력됩니다

PS1 will be set to "\u\$"

그리고

PS1 was set to "\u\$"

시스템의 printf(1)및/또는 ( 및 )를 참조하십시오 .printf(3)man 1 printfman 3 printf


또한 PS1내보내기가 필요하지 않습니다.

관련 정보