我有这个:
if [ "$(./bin/ft_putendl_fd_test.bin)" != "NO__\n" ]
then
echo "Error on ft_putendl_fd."
fi
Run Code Online (Sandbox Code Playgroud)
二进制输出:NO__\n,其中\n实际上是ASCII字符20,而不仅仅是\\n.
但是,我总是得到Error on ft_putendl_fd..
我试过比较,$'NO__\n'但它似乎也没有用.
我正在使用Bash 3.2.
请注意,序列"\n"不会产生换行符.您可以使用$'\n'(不可移植)或仅将换行符嵌入文本:
myno="NO__"$'\n'
myno="NO__
"
Run Code Online (Sandbox Code Playgroud)
但这不是问题,因为命令替换被定义为无论如何都要删除所有尾随的换行符.
这意味着你的测试必须是
[ "$(./bin/ft_putendl_fd_test.bin)" != "NO__" ]
Run Code Online (Sandbox Code Playgroud)
在极少数情况下,删除换行符功能可能会产生歧义(当您需要通过尾随换行符的数量进行区分时).你无法轻易关闭它,但它有可能:
x=$(./bin/ft_putendl_fd_test.bin; echo x)
x=${x%x}
[ "$x" != "NO__
" ]
Run Code Online (Sandbox Code Playgroud)
或者干脆:
[ "$(./bin/ft_putendl_fd_test.bin; echo x)" != "NO__
x" ]
Run Code Online (Sandbox Code Playgroud)