在bash中使用newline命令管道字符串?

Cha*_*son 14 bash

我试图通过BASH将包含换行符的字符串传递给PHP脚本.

#!/bin/bash

REPOS="$1"
REV="$2"

message=$(svnlook log $REPOS -r $REV)
changed=$(svnlook changed $REPOS -r $REV)

/usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php <<< "${message}\n${changed}"
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我看到文字"\n"而不是转义的换行符:

blah blah issue 0000002.\nU app/controllers/application_controller.rb
Run Code Online (Sandbox Code Playgroud)

有关如何将'\n'翻译成文字换行符的任何想法?

顺便说一下:<<在bash做什么?我知道<传递文件...

And*_*ner 21

尝试

echo -e "${message}\n${changed}" | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php 
Run Code Online (Sandbox Code Playgroud)

其中-e可以解释反斜杠转义(根据man echo)

请注意,这也将解释反斜杠,你可能有${message}${changed}.


来自bash手册:Here Strings

这里文档的一个变体,格式是:

<<<word
Run Code Online (Sandbox Code Playgroud)

该字被扩展并在其标准输入上提供给命令.

所以我会说

the_cmd <<< word
Run Code Online (Sandbox Code Playgroud)

相当于

echo word | the_cmd
Run Code Online (Sandbox Code Playgroud)