이 코드를 실행하면
#!/bin/bash
set -x
http --json http://example.com \
value=$'hello\r\n\r\nworld'
stdout에 캐리지 리턴이 두 개 있습니다.value
http --json http://example.com 'value=hello
world'
그러나 value
변수에 문자열이 있으면 표준 출력에서 동일한 문자열을 얻는 방법을 찾을 수 없습니다. 예를 들어, 내가 실행하면
#!/bin/bash
set -x
variable="hello\r\n\r\nworld"
http --json http://example.com \
value=$''"$variable"''
줄 바꿈은 없지만 \r\n\r\n
문자는 없습니다.
http --json http://example.com 'value=hello\r\n\r\nworld'
변수 내부의 값에서 시작하는 줄을 묶는 방법은 무엇입니까?
변경할 수는 없지만 variable="hello\r\n\r\nworld"
실행 중인 명령과 코드 사이에 코드를 추가할 수는 있습니다.
답변1
그게 나한테는 다야
#!/bin/bash
set -x
variable="hello\r\n\r\nworld"
http --json http://example.com \
value="${variable@E}"
답변2
$'...'
또는 다음과 같은 변수 할당에 사용하세요 .
variable=$'hello\r\n\r\nworld'
바꾸다
variable="hello\r\n\r\nworld"
또는 printf
이스케이프 문자를 처리하는 경우(모든 POSIXy 셸에서 작동해야 함):
escaped="hello\r\n\r\nworld"
raw=$(printf "%b" "$escaped")
그러나 명령 대체는 마지막 개행 문자(있는 경우)를 사용하므로 끝에 더미 문자를 추가하고 제거하여 이 문제를 해결해야 할 수도 있습니다.
escaped="hello world\n"
raw=$(printf "%b." "$escaped")
raw=${raw%.}
그런 다음 평소와 같이 결과 변수를 사용하십시오.