我有这个脚本
#!/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})
工作?
答案 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}"
,即删除$(
)
内容。