我正在尝试创建一个动态构造我需要执行的命令的bash脚本。 (合并lcov文件)
到目前为止,我能够构建命令行,结果如下:
#!/bin/bash
LCOV_INPUT_FILES=""
while read FILENAME; do
LCOV_INPUT_FILES="$LCOV_INPUT_FILES -a \"$FILENAME\""
done < <( find ../reports/coverage -name lcov.info )
echo lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov
lcov "${LCOV_INPUT_FILES}" -o ../reports/coverage.lcov
如果我在我的shell中运行echo
输出行,它可以工作,但我无法从我的脚本运行此命令,并且我没有bash伟大的调试它。
以下是我从echo获得的输出类型:
lcov -a "../reports/coverage/Chrome 26.0 (Linux)/lcov.info" -a "../reports/coverage/Firefox 20.0 (Linux)/lcov.info" -a "../reports/coverage/PhantomJS 1.8 (Linux)/lcov.info" -o ../reports/coverage.lcov
你知道这里有什么不对吗?
此致
济
答案 0 :(得分:3)
如果您使用双引号"${LCOV_INPUT_FILES}"
,bash会将整个字符串视为一个单词。如果没有双引号,bash会将变量的值拆分为空格。
对于构造字符串的方式,唯一的选择是使用eval
:
eval lcov "$LCOV_INPUT_FILES" -o ...
还有其他选择。您可以使用数组来存储参数
LCOV_INPUT_FILES+=(-a "$FILENAME")
然后只需用双引号扩展数组:
lcov "${LCOV_INPUT_FILES[@]}" -o ...