我有这个:
if [ "$(./bin/ft_putendl_fd_test.bin)" != "NO__\n" ]
then
echo "Error on ft_putendl_fd."
fi
二进制输出:NO__\n
,其中\n
实际上是ASCII字符20
,而不仅仅是\\n
。
但是,我总是得到Error on ft_putendl_fd.
。
我尝试与$'NO__\n'
进行比较,但它似乎也没有效果。
我正在使用Bash 3.2。
答案 0 :(得分:5)
请注意,序列"\n"
不会产生换行符。您可以使用$'\n'
(非便携式)或仅将换行符嵌入文本:
myno="NO__"$'\n'
myno="NO__
"
但这不是问题,因为命令替换被定义为删除所有尾随换行符。
这意味着您的测试必须
[ "$(./bin/ft_putendl_fd_test.bin)" != "NO__" ]
在极少数情况下,删除换行符功能可能会产生歧义(当您需要通过尾随换行符的数量进行区分时)。你无法轻易关闭它,但它有可能:
x=$(./bin/ft_putendl_fd_test.bin; echo x)
x=${x%x}
[ "$x" != "NO__
" ]
或者简单地说:
[ "$(./bin/ft_putendl_fd_test.bin; echo x)" != "NO__
x" ]
答案 1 :(得分:1)
我发现的最简单的解决方案是:
if [ "$(./bin/ft_putendl_fd_test.bin | cat -e)" != "$(echo 'NO__' | cat -e)" ]
then
echo "Error on ft_putendl_fd."
fi