我有这个:
if [ "$(./bin/ft_putendl_fd_test.bin)" != "NO__\n" ]
then
echo "Error on ft_putendl_fd."
fi
二进制输出:NO__\n
,其中 \n
实际上是 ASCII 字符 20
,而不仅仅是 \\n
.
但是,我总是在 ft_putendl_fd 上遇到 Error.
。
我已经尝试与 $'NO__\n'
进行比较,但它似乎也不起作用。
我正在使用 Bash 3.2。
最佳答案
请注意序列 "\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" ]
关于bash -\n 在 Bash 字符串和相等性检查中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126993/