for循环不能通过bash脚本生成html文件

时间:2016-09-16 23:09:05

标签: bash

当我按照bash脚本运行时

#!/bin/bash
items="b.js
   a.js
   c.js"
startScript='<script src="'
endScript='"></script>'
for item in $items
do
  echo $startScript$item$endScript
done

输出:

 <script src="c.js"></script>
 <script src="a.js"></script>
 <script src="b.js"></script>

我想通过bash脚本在生成的html文件中运行此循环。 For循环在这里不起作用。

#!/bin/bash
items="b.js
   a.js
   c.js"
startScript='<script src="'
endScript='"></script>'
cat << noEcho
<HTML>
<HEAD>
<TITLE>  Bash Script  </TITLE>
</HEAD>
<BODY>
for item in $items
do
 echo $startScript $item $endScript
done
</BODY>
</HTML>
noEcho

1 个答案:

答案 0 :(得分:3)

修复了最明显错误的简单示例:

#!/bin/bash
files=( b.js a.js c.js)
startScript='<script src="'
endScript='"></script>'
cat << noEcho
<html><head><title>Bash Script</title></head><body>
$(
for file in "${files[@]}"; do
 echo "${startScript}${file}${endScript}"
done
)
</body></html>
noEcho

您可以在http://ideone.com/rSsO9H上看到上面的运行及其输出。

一些注意事项:

  • 不要这样做。真。使用了解HTML语法的真实模板语言,并知道如何正确地转义内容;如果/当处理动态数据时,你会发现确保这种代码几乎不可能。
  • 字符串不是数组。如果需要数组,请使用实际数组。
  • 如果您希望将给定代码段的输出替换为字符串(或者,在本例中为heredoc),则需要将其替换为命令:$()