[更新的问题]
我有一个变量$CHANGED
,它存储一个subversion命令的输出,如下所示:CHANGED="$(svnlook changed -r $REV $REPOS)"
。
执行svnlook changed -r $REV $REPOS
会将以下内容输出到命令行:
A /path/to/file
A /path/to/file2
A /path/to/file3
但是,我需要将如下所示格式的输出存储在变量$FILES
:
A /path/to/file<br />A /path/to/file2<br />A /path/to/file3<br />
我需要在生成电子邮件按摩的命令中使用$FILES
:
sendemail [some-options] $FILES
它应该用$FILES
替换A /path/to/file<br />A /path/to/file2<br />A /path/to/file3<br />
,以便它可以解释html break标记。
答案 0 :(得分:4)
答案 1 :(得分:0)
您可以修改hek2mgl's answer以删除第一个<br />
(如果有):
CHANGED="
A /path/to/file
A /path/to/other/file
A /path/to/new/file
"
FILES="$(echo "${CHANGED//$'\n'/<br />}" | sed 's#^<br />##g')"
echo "$FILES"
输出:
A /path/to/file<br />A /path/to/other/file<br />A /path/to/new/file<br />
<小时/> 另一种方式(只有
sed
):
FILES="$(echo "$CHANGED" | sed ':a;N;$!ba;s#\n#<br />#g;s#^<br />##g')"
答案 2 :(得分:0)
手册页的Parameter Expansion部分是您的朋友。
从
开始changed="
A /path/to/file
A /path/to/other/file
A /path/to/new/file
"
您可以使用#
和%
扩展来移除前导和尾随换行符:
files="${changed#$'\n'}"
files="${files%$'\n'}"
然后用<br />
替换其他换行符:
files="${files//$'\n'/<br />}"
演示:
printf '***%s***\n' "$files"
***A /path/to/file<br />A /path/to/other/file<br />A /path/to/new/file***
(请注意,我已将您的全大写变量名称更改为小写。避免使用本地大写名称,因为这些名称倾向于通过环境进行通信。)
如果您不喜欢将换行符写为$'\n'
,您当然可以将其存储在变量中:
nl=$'\n'
files="${changed#$nl}"
files="${files%$nl}"
files="${files//$nl/<br />}"