tr을 사용하여 변수를 다시 할당하고 개행 및 캐리지 리턴을 제거합니다.

tr을 사용하여 변수를 다시 할당하고 개행 및 캐리지 리턴을 제거합니다.

특정 문자열을 변수(v1)에 로드합니다. 새 줄과 캐리지 리턴을 뺀 이 변수와 동일한 새 변수를 정의하려고 하므로 새 변수가 할당된 문자열에서 새 줄과 캐리지 리턴을 제거해야 합니다.

다음은 내가 수행하려는 작업의 예입니다(-->는 터미널 출력을 의미함).

v1="Hello\nThere" 

v2=  $(echo $v1 | tr -d '/n')  #This yields the error below.
--> bash: Hello\nThere: No such file or directory

마찬가지로 "/n" 대신 "l"을 바꾸려고 하면 다음과 같은 결과가 나타납니다.

v2=  $(echo $v1 | tr -d l)
--> bash: Heo\nThere: No such file or directory 

두 번째 예에서는 "l"이 사라지지만 "해당 파일이나 디렉터리가 없습니다."라는 메시지가 나타나는데 무슨 의미인지 알 수 없습니다. 이 경우 이는 무엇을 의미합니까? 어떤 파일이나 디렉토리를 찾고 있습니까? echo 결과를 tr로 전송합니다. "해당 파일이나 디렉터리가 없습니다"라는 메시지가 표시될 때 그것이 무엇을 의미하는지 잘 모르겠습니다.

또한 새 변수를 할당하지 않고 이 작업을 수행하면 작동합니다.

echo $v1 | tr -d l
-->   Heo\nThere

여기에 새 변수를 올바르게 할당하고 있습니까? 내가 사용하는 형식은 VariableName= $(expression) 입니다.

답변1

v1="Hello\nThere" 

먼저, 중간에 백슬래시가 있는 문자 그대로 v1문자열로 설정됩니다. Hello\nThere리터럴 줄 바꿈을 포함하려면 (Bash/Ksh/Zsh에서) 다음을 사용할 수 있습니다.

v1=$'Hello\nThere'

또는 (POSIXly):

v1='Hello
There'

그러면 다음과 같습니다.

v2=  $(echo $v1 | tr -d '/n') 

그것은 마치 v2= somecommand명령의 컨텍스트에서 v2=value somecommandset을 사용하여 명령을 실행하는 것과 같습니다. v2가지고 있는 줄을 사용하여 명령 대체를 확장하고 이를 Hello\nThere첫 번째이자 유일한 단어로 토큰화하고 글로빙한 다음 명령으로 실행하려고 합니다( v2환경이 빈 문자열로 설정됨).

경로에 아무것도 없기 때문에 실패합니다 Hello\nThere. 따라서 오류 메시지가 표시됩니다 Hello\nThere: No such file or directory.

쉘 변수 할당에는 공백을 사용할 수 없으며 를 사용해야 합니다 . 또한 사용하려는 v2=$(...)변수 확장 및 인수 주위에 따옴표를 넣고 캐리지 리턴 도 제거해야 합니다.\ntr\r

예를 들어 Bash를 사용하면 "Hellothere"가 인쇄됩니다.

#/bin/bash
v1=$'Hello\nthere'
v2=$(echo "$v1" | tr -d '\n\r')
printf "%s\n" "$v2"

다음을 사용할 수 있는 경우 확장을 $''사용하여 ${var/pattern/replacement}개행 및 캐리지 리턴을 제거 할 수도 있습니다.

#/bin/bash
v1=$'Hello\r\nthere\r\n'
v2=${v1//[$'\n\r']}
printf "%s\n" "$v2"

(이중 슬래시는 모든 일치 항목을 대체합니다. 대체 부분이 없으면 일치 항목이 제거됩니다. 대괄호는 []패턴 일치 의미를 유지하기를 원하므로 괄호를 인용해서는 안 되지만 내부 항목은 고려 \n\r되어야 합니다. $''백슬래시와 문자뿐만 아니라 NL 및 CR도 가능합니다.

바라보다:

답변2

원하는 명령은 다음과 같습니다.

v1="Hello\nThere"

v2=$(echo $v1 | tr -d '\\n')

이렇게 하면 개행 문자가 아닌 \n리터럴로 해석되어 오류가 발생합니다. \n사용하면 \\n이 문제를 해결할 수 있습니다.

나중에 확인할 수 있습니다:

echo $v2

산출:

HelloThere

관련 정보