如何使用echo命令向.zshrc写入含特殊字符的shell命令字符串
解决方案
直接执行以下命令即可把目标配置原样写入.zshrc,效果和现有homebrew的eval配置完全一致:
echo 'eval "$(docker exec -it <abc-123>)"' >> ~/.zshrc
原理说明
shell中单引号属于强引用标记,被单引号包裹的所有内容都会被当作纯字符串处理,内部的双引号、$()命令替换语法、尖括号都不会被提前解析执行,会完完整整写入目标文件。
写入后可以用下面的命令校验结果:
tail -n 1 ~/.zshrc
如果输出内容和你要写入的eval "$(docker exec -it <abc-123>)"完全一致,执行source ~/.zshrc就能让配置立即生效。
之前写法失效原因
你之前用双引号嵌套的写法会触发shell的提前解析:外层双引号包裹范围内的$(docker exec -it <abc-123>)会被当场当作命令执行,shell会把这条docker命令的输出替换到字符串里再写入文件,根本不会保留你需要的、等zshrc加载时再执行的命令替换结构。
如果坚持要用双引号实现,需要对内部的双引号和$符号做转义,写法冗余容易出错,不推荐:
echo "eval \"\$(docker exec -it <abc-123>)\"" >> ~/.zshrc
内容的提问来源于stack exchange,提问作者Paul Sender
相关产品推荐
相关产品推荐

