如何去除 Bash variable expansion 后加的单引号?

2021-06-30 14:42:17 +08:00
 dangyuluo

例子如下

$ 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, (xmllintpclint)" 用单引号圈了起来,似乎因为他们含有一些特殊字符?如何阻止 bash 这种行为呢?谢谢

我最终想要 Bash 执行的命令为:

$ pytest --pytest-args -k "not (xmllint or pclint)"
676 次点击
所在节点   Bash
4 条回复
AoEiuV020
2021-06-30 14:52:23 +08:00
叠个 bash,
bash -c "pytest ${PYTEST_FLAG}"
xuboying
2021-06-30 14:53:09 +08:00
declare -a PYTEST_FLAG=(--pytest-args -k "not (xmllint or pclint)")
pytest "${PYTEST_FLAG[@]}"

建议了解一下 shellcheck
zbinlin
2021-06-30 21:03:04 +08:00
这样?

eval pytest "${PYTEST_FLAG}"
dangyuluo
2021-06-30 23:26:00 +08:00
谢谢,eval 和`bash -c`都不被允许。

@xuboying 不错!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/786688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX