我试图通过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}"
当我这样做时,我会看到文字“\ n”而不是转义的换行符:
blah blah issue 0000002.\nU app/controllers/application_controller.rb
如何将'\ n'翻译成文字换行符?
顺便说一下:什么&lt;&lt;&lt;在bash做什么?我知道&lt;传入文件...
答案 0 :(得分:19)
试
echo -e "${message}\n${changed}" | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php
其中-e启用反斜杠转义的解释(根据man echo
)
请注意,这也将解释您在${message}
和${changed}
中可能具有的反斜杠转义。
来自bash手册: 这里的字符串
此处文件的变体,格式为:
<<<word
单词被扩展并在其标准输入上提供给命令。
所以我要说
the_cmd <<< word
相当于
echo word | the_cmd
答案 1 :(得分:4)
newline=$'\n'
... <<< "${message}${newline}${changed}"
<<<
被称为“here string”。它是“here doc”的单行版本,不需要诸如“EOF”之类的分隔符。这是一个这里的文档版本:
... <<EOF
${message}${newline}${changed}
EOF
答案 2 :(得分:1)
为了避免在${message}
和${changed}
中解释潜在的转义序列,请尝试连接子shell中的字符串(除非您指定{echo
,否则会在每个-n
后追加换行符。 1}}选项):
( echo "${message}" ; echo "${changed}" ) | /usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php
括号在子shell中执行命令(如果没有给出括号,只有第二个echo的输出将通过管道传输到你的php程序中。)