我有一个小bash脚本bdocs.sh
#!/bin/bash
REPO=$1
QUICKBOOK=/usr/bin
AUTOINDEX=/usr/bin
XSLTPROC=/usr/bin
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl
if [[ -n "$REPO" ]]; then
echo cmake -DBOOSTQUICKBOOK_ROOT=$QUICKBOOK \
-DBOOSTAUTOINDEX_ROOT=$AUTOINDEX \
-DXSLTPROC_ROOT=$XSLTPROC \
-DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD \
-DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL \
-DHPX_WITH_DOCUMENTATION=On \
$REPO
fi但是,如果我称它为> ./bdocs.sh ../repo,它只会回显如下:
cmake -DBOOSTQUICKBOOK_ROOT=/usr/bin -DBOOSTAUTOINDEX_ROOT=/usr/bin
./build_docs.sh: line 14: -DXSLTPROC_ROOT=/usr/bin: No such file or directory
./build_docs.sh: line 16: -DDOCBOOK_DTD_ROOT=/usr/share/xml/docbook/schema/dtd/4.2: No such file or directory
./build_docs.sh: line 17: -DHPX_WITH_DOCUMENTATION=On: command not found
./build_docs.sh: line 18: h: command not found为什么在将第二个命令行参数传递到cmake之后,我的行延续就不能工作了?
发布于 2015-10-16 19:57:55
在行尾的\之后不能有空格。
发布于 2015-10-16 20:20:27
使用cat和这里的文档效率略低,但可读性更强:
#!/bin/bash
REPO=$1
QUICKBOOK=/usr/bin
AUTOINDEX=/usr/bin
XSLTPROC=/usr/bin
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl
if [[ -n "$REPO" ]]; then
cat <<EOF
cmake -DBOOSTQUICKBOOK_ROOT=$QUICKBOOK
-DBOOSTAUTOINDEX_ROOT=$AUTOINDEX
-DXSLTPROC_ROOT=$XSLTPROC
-DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD
-DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL
-DHPX_WITH_DOCUMENTATION=On
$REPO
EOF
fi如果生成的文件的格式不重要(只是生成器的格式),那么使用数组来保存cmake参数;换行符是隐式的。
#!/bin/bash
REPO=$1
QUICKBOOK=/usr/bin
AUTOINDEX=/usr/bin
XSLTPROC=/usr/bin
DOCBOOK_DTD=/usr/share/xml/docbook/schema/dtd/4.2
DOCBOOK_XSL=/usr/share/xml/docbook/stylesheet/docbook-xsl
arguments=(-DBOOSTQUICKBOOK_ROOT=$QUICKBOOK
-DBOOSTAUTOINDEX_ROOT=$AUTOINDEX
-DXSLTPROC_ROOT=$XSLTPROC
-DDOCBOOK_DTD_ROOT=$DOCBOOK_DTD
-DDOCBOOK_XSL_ROOT=$DOCBOOK_XSL
-DHPX_WITH_DOCUMENTATION=On
)
if [[ -n "$REPO" ]]; then
echo cmake "${arguments[@]}" "$REPO"
fihttps://stackoverflow.com/questions/33178602
复制相似问题