我的系统运行的 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 答案解释道,替换echo
为printf
,以达到跨不同平台的一致输出。
了解这一点后,请将您的命令更改为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)