echo ps 同时保留换行符?
如果我在终端中执行 ps ax
,结果将如下所示:
PID TT STAT TIME COMMAND
1 ?? Ss 2:23.26 /sbin/launchd
10 ?? Ss 0:08.34 /usr/libexec/kextd
11 ?? Ss 0:48.72 /usr/sbin/DirectoryService
12 ?? Ss 0:26.93 /usr/sbin/notifyd
而如果我执行 echo $(ps ax)
,我会得到:
PID TT STAT TIME COMMAND 1 ?? Ss 2:23.42 /sbin/launchd 10 ?? Ss 0:08.34 /usr/libexec/kextd 11 ?? Ss 0:48.72 /usr/sbin/DirectoryService 12 ?? Ss 0:26.93 /usr/sbin/notifyd
为什么?
如何保留换行符和制表符?
If I do ps ax
in Terminal, the result will be like this:
PID TT STAT TIME COMMAND
1 ?? Ss 2:23.26 /sbin/launchd
10 ?? Ss 0:08.34 /usr/libexec/kextd
11 ?? Ss 0:48.72 /usr/sbin/DirectoryService
12 ?? Ss 0:26.93 /usr/sbin/notifyd
While if I do echo $(ps ax)
, I get:
PID TT STAT TIME COMMAND 1 ?? Ss 2:23.42 /sbin/launchd 10 ?? Ss 0:08.34 /usr/libexec/kextd 11 ?? Ss 0:48.72 /usr/sbin/DirectoryService 12 ?? Ss 0:26.93 /usr/sbin/notifyd
Why?
And how do I preserve the newlines and tab characters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
一如既往的方式:使用引号。
Same way as always: use quotes.
只需在要回显的变量中使用双引号即可,而
无需所有额外的垃圾编码或麻烦。
编辑:呃...有人打败了我!哈哈
Simply use double-quotes in the variable that is being echo'd
this will do it without all that extra junk coding or hassle.
edit: ugh... someone beat me to it! lol
这是因为 echo 根本不是管道——它将 ps ax 的输出解释为变量,并且 bash 中的(未加引号的)变量本质上压缩了空格——包括换行符。
如果您想通过管道传输
ps
的输出,请通过管道传输:That's because
echo
isn't piping at all--it's interpreting the output ofps ax
as a variable, and (unquoted) variables in bash essentially compress whitespace--including newlines.If you want to pipe the output of
ps
, then pipe it:或者,如果您想进行逐行访问:
这需要最新的 bash 版本
Or if you want to have line-by-line access:
This requires a recent(ish) bash version
您是在谈论管道输出吗?您的问题说“管道”,但您的示例是命令替换:
更有用吗?
如果您正在谈论 命令替换,则需要引号,正如其他人已经指出的那样out 以强制 shell 不丢弃空格:
Are you talking about piping the output? Your question says "pipe", but your example is a command substitution:
More useful?
If you're talking about command substitution, you need quotes as others have already pointed out in order to force the shell not to throw away whitespace: