GitHub Actions中test -v报错:-v: unary operator expected
问题分析与解决
报错的原因是test -v是bash 4.2及以上版本才支持的内置test命令专属选项,但在GitHub Actions的运行环境中,你的代码实际调用了外部的/usr/bin/test(GNU coreutils提供的独立命令),这个外部test并不支持-v参数,因此抛出unary operator expected错误。而你本地bash环境中直接执行test时,默认调用的是bash内置的test,所以可以正常运行。
两种可行的修复方案
方案1:使用bash专属条件表达式(推荐)
用[[ -v A ]]替代test -v A,[[是bash的内置条件判断语法,不会调用外部命令,兼容性更稳定:
- name: Run tests run: | set -e ... [[ -v A ]] || export B=42 shell: bash
方案2:兼容旧版bash的写法
如果需要兼容更低版本的bash,可以用变量扩展的方式判断变量是否存在,不需要依赖-v选项:
- name: Run tests run: | set -e ... if [ -z "${A+x}" ]; then export B=42; fi shell: bash
其中${A+x}的逻辑是:若变量A已定义,就扩展为字符串x;若未定义则为空。通过-z判断是否为空,即可确定是否需要导出B。
内容的提问来源于stack exchange,提问作者user1244932
相关产品推荐
相关产品推荐

