Why does a cURL request return a percent sign (%)

2019-02-21 20:08发布

I've noticed that the return from any cURL request in ZSH ends in a %, for example:

$ curl http://textbelt.com/text -d number="555555555" -d message="hey"
=> { "success": true }%

Why is this character being added and is there a standard method for removing it?

note: ZSH is the only shell that I notice this occurring (tested in bash csh ksh sh tcsh zsh)

2条回答
我只想做你的唯一
2楼-- · 2019-02-21 20:37

Try explicitly adding a newline \n to the message.

查看更多
Explosion°爆炸
3楼-- · 2019-02-21 20:39

This is a zsh feature that prints a percent-and-newline after a command completes if that command does not already include a newline at the end of its output. If zsh did not do this, you would either not ever notice the fact that the command didn't print a newline - or you'd see zsh's command prompt not start on the margin and think it was a bug in zsh.

Tools like curl religiously print whatever results they get from the source and should never spontaneously print a newline without being asked to. I see this behaviour most often with curl. If you are coding a tool that uses curl, you do of course have the option of adding in a newline yourself.

I suggest not adding a newline unless you really have to. In the case where you really want to add a newline, you can use a separate tool (echo for example) - but the easiest with curl is the "write-out" option:

$ curl http://api.macvendors.com/0015c7   
Cisco Systems, Inc%     
$ curl -w '\n' http://api.macvendors.com/0015c7
Cisco Systems, Inc
$

From curl's man page:

   -w, --write-out <format>
          Make  curl  display  information  on stdout after a completed transfer. The format is a string that may contain plain text
          mixed with any number of variables. The format can be specified as a literal "string", or you can have curl read the  for-
          mat from a file with "@filename" and to tell curl to read the format from stdin you write "@-".
查看更多
登录 后发表回答