我有一个带有目录路径的变量。如果我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)
目录名称中有一个尾随 CR。(将
0d
视为十六进制转储中的最后一个字符。)这也解释了为什么目录路径被错误消息覆盖。通常你会得到
但是您得到了与此等效的信息,其中前导信息已被 CR 和随后的错误消息覆盖:
试试这个来证明这一点:
\r
您可以使用这样的构造删除尾随字符正如@Kusalananda 评论的那样,您的变量包含的不仅仅是满足 - 不专心 - 眼睛。看到 echo 输出后的空白行了吗?
确实有 '\r' 和 '\n' 字符。我删除了它们: