我正在编写一个 bash 脚本,我想回显一个字符串,但不会在末尾自动添加换行符。阅读手册页时,它说标志是-n
。
问题是,当我这样做时:
echo -n "My string is here"
Bash 脚本中的输出是:
-n My string is here
知道为什么-n
要输出标志而不是处理标志吗?
答案1
检查你正在使用的 shell:
echo $0
如果是/bin/sh
,请更改为/bin/bash
并重chsh
试。
http://hints.macworld.com/article.php?story=20071106192548833
答案2
可以在 CentOS 上运行,但 OSX 似乎不喜欢 -n 标志。
答案3
echo
不同版本之间存在奇怪的不一致——/bin/echo 的不同版本,以及不同 shell 中的内置版本(甚至同一 shell 的不同版本)。有些版本理解选项(例如-n
),有些版本理解字符串中的转义序列(以 结尾以"\c"
跳过换行符)。有些版本使用两者的奇怪混合。
如果您希望行为保持一致,请避免echo
使用,而printf
应使用。这有点复杂,但更容易预测:
printf "%s" "My string is here"