为了解决问题,David Foerster 提到以下命令错误地换行,从而引入了换行符和退格符,而这些换行符和退格符不应该存在:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
是否可以显示他在命令中到底指的是什么?
答案1
我们可以使用printf
来突出显示各个参数并检查 shell 如何对它们进行标记。对于有问题的命令与我在链接问题的答案中的更正变体(在 Bash 和 Dash 中测试):
$ printf '"%s"\n' sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
"sudo"
"add-apt-repository"
"deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable"
和
$ printf '"%s"\n' sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
"sudo"
"add-apt-repository"
"deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable"
哦,那没什么不同。但是,对于链接问题的作者来说,存储库源文件中的内容并非如此:
Error: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu \ xenial \ stable' invalid
我不知道这是怎么发生的,但看起来确实是行尾反斜杠的问题。它们还能从哪里来?也许作者实际上输入了不同的命令,或者他们使用了不同的 shell 解释器。