Shell脚本echo输出参数

时间:2015-08-02 14:20:52

标签: bash shell socat

我目前正在尝试构建一个发送广播UDP数据包的shell脚本。我的问题是我的回声是输出参数,而我没有ideia为什么。这是我的剧本:

dataSource

使用wireshark我可以看到脚本正在打印-ne作为字符,也没有将每个\ xHH转换为相应的ASCII字符。

谢谢!

2 个答案:

答案 0 :(得分:0)

我想出了我的问题。事实证明我用sh ./script.sh而不是bash运行我的脚本./script.sh

答案 1 :(得分:0)

echo实现对于它们是否采用命令选项(如-ne)或者只是将它们视为要打印的字符串的一部分,和/或它们是否将字符串中的转义序列解释为打印。听起来你看到bash的内置版本echo与(我在猜测)/ bin / echo中的版本之间存在差异。我也看到它甚至在不同版本的bash之间也有所不同。

如果您想要对任何不重要的事情采取一致的行为,请使用printf代替echo。正确使用它会稍微复杂一些,但是IMO值得,因为你的脚本不会随意中断,因为echo因任何原因而改变了。关于printf的棘手问题是第一个参数是特殊的 - 它是一个格式字符串,其中所有转义序列都被解释,并且任何%序列告诉它如何添加其余参数。此外,除非您明确指出,否则它不会在最后添加换行符。在这种情况下,您可以使用格式字符串中的十六进制代码:

printf "$var1" | socat - UDP4-DATAGRAM:255.255.255.255:5050,broadcast
printf "$var2" | socat - UDP4-DATAGRAM:255.255.255.255:5050,broadcast