我注意到echo直接调用时的行为略有不同
root$echo "line1\nline2"
当通过脚本调用时:
#! /bin/sh
echo "line1\nline2"
[...]
Run Code Online (Sandbox Code Playgroud)
第一个案例将打印:
line1\nline2
Run Code Online (Sandbox Code Playgroud)
,而后者将打印
line1
line2
Run Code Online (Sandbox Code Playgroud)
因此在脚本中使用时echo总是假设有标志-e?
你的脚本有一个shebang系列#! /bin/sh,而你的交互式shell可能是Bash.如果您想要Bash行为,请将脚本更改为#! /bin/bash.
这两个程序sh和bash是不同的炮弹.即使在哪里系统/bin/sh和/bin/bash同属于一个程序,它的行为有所不同,这取决于命令你用它来调用它.(虽然在Bash的模式下默认情况下echo它没有像-e默认情况下那样开启sh,所以你可能在一个sh真正的系统上dash.)
如果sh在提示符下键入,则会发现其echo行为与脚本中的行为相同.但是sh不是一个非常友好的交互式使用外壳.
如果您正在尝试编写最大程度的可移植shell脚本,那么您应该坚持使用vanilla sh语法,但如果您不是为了远程编写分发,可以使用Bash脚本 - 只需确保告诉系统它们是,事实上,Bash脚本,通过放入bashshebang线.
echo顺便说一句,该命令可能是跨shell最臭名昭着的不一致命令.因此,如果你想要便携性,那么你最好完全避免它,除了直接,无选项,无逃避,总是换行输出.一个非常便携的选项是printf.