bash字符串错误地拆分

时间:2018-04-23 20:30:40

标签: bash git

我有这个脚本

#!/bin/bash
function clone {
    url=$(cli-tool "$1" that finds url)
    echo $url
    $(git clone ${url})
}

echo以格式打印正确的url " https://gitprovider.com/Example/_git/Repo%20Name" (不是真正的网址,但模仿真实的网址)

但是git clone输出

fatal: could not create work tree dir 'Repo%20Name"': Invalid argument

如果我执行

git clone "https://gitprovider.com/Example/_git/Repo%20Name"

将克隆正确的回购。

那为什么不是

$(git clone ${url})

工作?

2 个答案:

答案 0 :(得分:2)

仅当您要将命令的输出用作另一个命令的参数时,才需要命令替换。在您的情况下,git clone的输出然后被解析为用于构建命令行的单词序列。你不想这样做;您只需要git clone ...运行并在终端上显示其输出。

比较

 $ echo $(echo foo)
 foo
 $ $(echo foo)
 bash: foo: command not found

您只需要git clone "$url",而不是$(git clone "$url")

答案 1 :(得分:1)

不要使用$(git clone ${url}),只需使用git clone "${url}",即删除$( )内容。