bash -\n 在 Bash 字符串和相等性检查中

标签 bash shell

我有这个:

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/

相关文章:

linux - 使用 grep 显示文件中没有文本的文件

bash - Phonegap CLI从SSH session 运行,但不是从bash脚本运行

linux - Bash 以以下格式输出所有链接

bash - 从 Imagemagick 修剪中获取偏移量

bash - 如何在不回显的情况下从 shell 脚本获取密码

shell - 将 shell 脚本中的 echo 输出重定向到日志文件

sql - oracle 行计数到 shell 脚本变量

bash - 当您处于历史记录中间时,导航到历史记录中最早/最新的命令

linux - 在 shell 脚本中发送包含多个文件的邮件

linux - 如何打印包含 ANSI 转义文本的文件