我想要一个生成HTML模板的Bash脚本。该模板将包含基于命令行输入参数的库。这是我的想法:
#!/bin/bash
function libraries
{
if [ "$1" == "bootstrap" ]; then
echo "<link type="text/css" rel="stylesheet" href="css/bootstrap.css" />"
fi
}
##### Main
cat << _EOF_
<!DOCTYPE html>
<html>
<head>
<title> </title>
$(libraries)
</head>
<body>
</body>
</html>
_EOF_
当我运行./template_creator.sh bootstrap
时,我得到了这个输出:
<!DOCTYPE html>
<html>
<head>
<title> </title>
</head>
<body>
</body>
</html>
如果我不包含if语句而只包含echo,则输出正常。所以我认为麻烦在if语句中。有什么建议?
答案 0 :(得分:2)
您可以使用printf
在模板中注入变量。
在模板中使用printf
格式(例如%s
)作为插入点。
这样您甚至可以使用文件作为模板(使用tpl=$(cat "main.tpl"
调用它)并在脚本中处理变量。
libraries() {
if [ "$1" == "bootstrap" ]; then
link='<link type="text/css" rel="stylesheet" href="css/bootstrap.css" />'
printf "$tpl" "$link"
fi
}
##### Main
read -d '' tpl << _EOF_
<!DOCTYPE html>
<html>
<head>
<title> </title>
%s
</head>
<body>
</body>
</html>
_EOF_
libraries "$1"
答案 1 :(得分:1)
而不是$(libraries)
写$(libraries) $1
。
答案 2 :(得分:1)
在函数内部,$1
指向传递给该函数的第一个参数,而不是传递给脚本的第一个参数。您可以使用here-document中的$(libraries "$1")
将脚本的第一个参数传递给函数,或者将其分配给脚本开头的全局变量,然后在函数中使用它。