例子如下
$ set -x # enable debug output from bash
$ export PYTEST_FLAG='--pytest-args -k "not (xmllint or pclint)"';
$ pytest ${PYTEST_FLAG}
+ pytest --pytest-args -k '"not' '(xmllint' or 'pclint)"' # this line is the debug output
... error
从第四行可以看出,本来"not (xmllint or pclint)"
应该作为一个字符串传递给pytest
命令,但是 bash 在 variable expansion 后把"not
, (xmllint
和 pclint)"
用单引号圈了起来,似乎因为他们含有一些特殊字符?如何阻止 bash 这种行为呢?谢谢
我最终想要 Bash 执行的命令为:
$ pytest --pytest-args -k "not (xmllint or pclint)"
1
AoEiuV020 2021-06-30 14:52:23 +08:00
叠个 bash,
bash -c "pytest ${PYTEST_FLAG}" |
2
xuboying 2021-06-30 14:53:09 +08:00
declare -a PYTEST_FLAG=(--pytest-args -k "not (xmllint or pclint)")
pytest "${PYTEST_FLAG[@]}" 建议了解一下 shellcheck |
3
zbinlin 2021-06-30 21:03:04 +08:00
这样?
eval pytest "${PYTEST_FLAG}" |