为什么我在 Debian 中运行该命令时,这个 Bash 命令输出与预期不同?

为什么我在 Debian 中运行该命令时,这个 Bash 命令输出与预期不同?

我的系统运行的 Debian 版本中的 bash 版本是:

bash --version|awk 'NR==1'
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)

Eyal Levin 在另一个 Stack Overflow 帖子中的回答它建议:

Example:

$ echo "title\nvalue1\nvalue2\nvalue3" | (read line; echo "$line"; grep value2)

Output:

title
value2

在我的 Bash 控制台中运行以下命令:

debian@debian:~$ echo "title\nvalue1\nvalue2\nvalue3" | (read line; echo "$line"; grep value2)
titlenvalue1nvalue2nvalue3
debian@debian:~$ 

为什么在我的操作系统中命令输出的结果不同?

echo "title\nvalue1\nvalue2\nvalue3" | (read line; echo "$line"; grep value2)

答案1

由于某种原因,echo在不同平台上的行为有所不同。

这样这个 Stack Overflow 答案解释道,替换echoprintf,以达到跨不同平台的一致输出。

了解这一点后,请将您的命令更改为printf如下方式使用:

printf "title\nvalue1\nvalue2\nvalue3" | (read line; echo "$line"; grep value2)

或者你可以直接将-e参数添加到echo“启用反斜杠转义的解释”中echo手册页解释

echo -e "title\nvalue1\nvalue2\nvalue3" | (read line; echo "$line"; grep value2)

经过测试,它可以在 Ubuntu 20.04 上的 Bash 上运行:

GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

而且它在 Apple 推出的 macOS Monterey (12.6) 版本的 Bash 上也能很好地运行:

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin21)

相关内容