为什么 Vagrant 在其中一条配置行中创建了非常不同的输出?

为什么 Vagrant 在其中一条配置行中创建了非常不同的输出?

为什么我的流浪者要改造这条规定线:

echo "eval \"\$(starship init bash)\"" >> ~/.bashrc

在 .bashrc 中的这一行?

eval  __main() { local major="${BASH_VERSINFO[0]}" local minor="${BASH_VERSINFO[1]}" if ((major > 4)) || { ((major == 4)) && ((minor >= 1)); }; then source <(/usr/local/bin/starship init bash --print-full-init) else source /dev/stdin <<<"$(/usr/local/bin/starship init bash --print-full-init)" fi } __main unset -f __main 

这是执行的结果$(starship init bash)但它不应该执行,因为我只做了一个回声。

我该如何避免呢?

编辑

使用单引号时结果是相同的,但被格式化了。

我尝试echo "eval \"\$(starship init bash)\"" >> ~/.bashrc在虚拟机内运行该命令,并且它运行良好。

答案1

有两个问题:

首先,正如 @harrymc 所说,我应该使用单引号。但我没有在字符串外部使用单引号,而是像这样使用它们:

echo "eval \'\$(starship init bash)\'" >> ~/.bashrc

这继续创建一个扩展的字符串,而不是我想要的。

第二个问题是我忘记了 echo 中的 -e 开关,它禁用了反斜杠转义的解释。

因此正确的一行是这样的:

echo -e 'eval \"\$(starship init bash)\"' >> ~/.bashrc

感谢所有提供帮助的人。

相关内容