为什么我的流浪者要改造这条规定线:
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
感谢所有提供帮助的人。