![변수의 내용이 변경된 것 같습니다.](https://linux55.com/image/127534/%EB%B3%80%EC%88%98%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%B4%20%EB%B3%80%EA%B2%BD%EB%90%9C%20%EA%B2%83%20%EA%B0%99%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
디렉토리 경로가 있는 변수가 있습니다. 콘텐츠를 시도 하면 echo
올바른 경로가 출력되지만 시도하면 다음과 cd
같습니다 /home/user/
.
[user@project]$ echo $PROJECT_DELIVERY
/home/user/projects/ws/project/delivery/project_name_0.1.0
[user@project]$ cd $PROJECT_DELIVERY
: No such file or directoryuser/projects/ws/project/delivery/project_name_0.1.0
내용은 이렇습니다printf %s "$PROJECT_DELIVERY" | xxd
[a27503408@ded30325 install]$ printf %s "$PROJECT_DELIVERY" | xxd
0000000: 2f68 6f6d 652f 6132 3735 3033 3430 382f /home/user/
0000010: 7072 6f6a 6563 7473 2f61 7332 3530 2f41 projects/as250/A
0000020: 5332 3530 5f4d 3135 3533 5f54 4d54 432f S250_M1553_TMTC/
0000030: 6465 6c69 7665 7279 2f41 5332 3530 5f4d delivery/AS250_M
0000040: 3135 3533 5f54 4d54 435f 302e 312e 300d 1553_TMTC_0.1.0.
이 동작의 원인이 무엇인지 아시나요? 나는 bash 4.1.2(1)을 사용하고 있습니다.
답변1
디렉터리 이름 뒤에 CR이 있습니다. ( 0d
16진수 덤프의 마지막 문자 로 간주됩니다 .)
또한 오류 메시지가 디렉터리 경로를 덮어쓰는 이유도 설명합니다. 보통 당신은 얻을 것입니다
cd /qwerty
-bash: cd: /qwerty: No such file or directory
그러나 CR과 그에 따른 오류 메시지가 주요 정보를 덮어쓰는 것과 같은 결과를 얻게 됩니다.
cd /qwerty
: No such file or directory
이것을 증명해 보세요:
echo "$PROJECT_DELIVERY<"
\r
다음과 같은 구조를 사용하여 후행 문자를 제거할 수 있습니다.
r=$'\r' # Or r=$(printf "\r")
PROJECT_DELIVERY="${PROJECT_DELIVERY%$r}" # Strip the CR from the end
답변2
@Kusalananda가 언급했듯이 변수에는 부주의한 것 이상의 내용이 포함되어 있습니다. 에코 출력 후 빈 줄을 보셨나요?
답변3
실제로 '\r' 및 '\n' 문자가 있습니다. 다음을 사용하여 제거했습니다.
VARIABLE="$(echo "$VARIABLE"|tr -d '\n'|tr -d '\r')"