在 shell 中连接字符串

在 shell 中连接字符串

我有一个文件 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

相关内容