我目前正在尝试构建一个发送广播UDP数据包的shell脚本。我的问题是我的回声是输出参数,而我没有ideia为什么。这是我的剧本:
dataSource
使用wireshark我可以看到脚本正在打印-ne作为字符,也没有将每个\ xHH转换为相应的ASCII字符。
谢谢!
答案 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