非常相似to this question。
我正在使用BASH中的自动脚本迭代一些事情。偶尔脚本会出现“-n”,echo会尝试解释这个。
试图这样:
$ POSIXLY_CORRECT=1 /bin/echo -n
和
$ POSIXLY_CORRECT=1 /bin/echo "-n"
但它每次都会解释这个论点。
然后这个,它有效,但可以在字符串中点击转义字符,这就是为什么我不想对所有输入应用空字符并使用-e。
$ echo -e "\x00-n"
-n
printf是可能的,但是要避免,除非没有其他选项(并非所有机器都将printf作为实用程序)。
$printf "%s" "-n"
-n
那么有没有办法让回声打印“-n”?
答案 0 :(得分:8)
printf
应该是所有shell中的内置函数,除非您的某些机器具有非常旧的shell版本。它已经在bash
内置了很长时间。它可能比echo -e
更便携。
否则,我们无法获得它所关心的echo
个选项。
修改:从an answer到另一个类似的问题;通过使用这个方便的无数字版权保留包装器来避免引用printf
的问题:
ech-o() { printf "%s\n" "$*"; }
(那是' s"没有选项")
答案 1 :(得分:4)
如何为字符串添加一个字符(例如“x”),并使用剪切即时删除:
echo "x-n" | cut -c 2-
答案 2 :(得分:3)
echo“-n”告诉shell将'-n'作为echo的第一个参数,即character的字符。从语义上讲,echo "-n"
与echo -n
相同。试试这个(它是一个POSIX标准,应该适用于任何shell):
printf '%s\n' "-n"
答案 3 :(得分:2)
如果您使用名称sh
调用Bash,它将模仿 sh ,其中-n
选项不可用于echo
。我不确定这是否符合您的需求。
$ /bin/sh -c 'echo -n'
答案 4 :(得分:0)
echo "-n"
将无法打印-n
,因为-n
被解释为echo
的选项(请参阅help echo
)。但你可以使用:
echo -e "\055n"
答案 5 :(得分:-1)
作弊方法:
echo -e "\r-n"