変数の内容が変わったようです。

変数の内容が変わったようです。

ディレクトリパスを持つ変数があります。コンテンツを試すと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があります。 (0d16進ダンプの最後の文字と見なされます。)

また、エラーメッセージがディレクトリパスを上書きする理由も説明します。通常あなたは得るでしょう

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')"

関連情報