为何echo命令的参数会被输出到重定向文件中?
解决bash脚本中
echo -n输出-n参数的问题 问题出在脚本调用的echo可能是外部命令版本(比如/bin/echo),而你在终端直接执行时用的是bash内置的echo——两者对-n参数的处理逻辑不一样:bash内置echo会把-n当作“抑制末尾换行”的选项,而外部echo会把它当成普通字符串输出。
给你两种可靠的修正方案:
方案1:指定bash作为脚本解释器
在脚本第一行加上#!/bin/bash,强制脚本使用bash内置的echo,这样-n就能正常生效:
#!/bin/bash MY_VAR=foobar echo -n "$MY_VAR" > test.txt
方案2:用printf替代echo
printf的行为跨平台更一致,完全避免不同echo实现的兼容性问题,写法也很简单:
MY_VAR=foobar printf "%s" "$MY_VAR" > test.txt
终端直接执行没问题的原因是:你默认用的是bash shell,直接敲echo调用的是bash内置版本,自然能正确解析-n选项;但脚本如果没指定解释器,系统可能会用sh来执行,而sh的echo大概率是外部命令,就会把-n当成输出内容。
内容的提问来源于stack exchange,提问作者Scorb
相关产品推荐
相关产品推荐

