config.iniファイルがあります。
repo_path=ssh://git@localhost:10022/root/
dir_path=/home/vagrant/workspace/
そして、そのファイルからエクスポートして接続するための「script.sh」は次のとおりです。
while read -r line; do export $line; done <config.ini
repo_name=$1
repo_path=$repo_path$repo_name'.git'
dir_path=$dir_path/$repo_name
echo $repo_path
echo $dir_path
したがって、スクリプトを実行するとき:
./script.sh sample
出力:
sample.gitlocalhost:10022/root/
/sampleagrant/workspace/
予想出力:
ssh://git@localhost:10022/root/sample.git
/home/vagrant/workspace/sample
答え1
合理的な説明は、データにキャリッジリターンが含まれていることです。
sample.gitlocalhost:10022/root/
^^^^^^^^^^
つまり、文字列は次のようになります(C言語文字列リテラル表記を使用)。
"ssh://git@localhost:10022/root/\rsample.git"
注は\r
キャリッジリターンを意味します。
これを端末に送信すると、キャリッジリターンはカーソルを行の先頭に移動してプレフィックスをsample.git
上書きします。ssh://...
これらの「不思議な出力」問題をデバッグするには、コマンド出力をバイナリダンプユーティリティにパイプすることができますod
。たとえば、次のようになります。
echo $strange | od -t c # see characters with backslash notation, or -t x1 for hex