可以"覆盖"测试([[)内置吗?



是否可以覆盖Bash的测试内置?所以

[[ $1 = 'a' ]]

不仅进行测试,还输出失败时预期的结果?类似的东西

echo "Expected $1 to be a.'

编辑

我知道这很糟糕:-)。

测试表达式复合命令执行影响所有扩展的实际短路。

$ set -x
$ [[ 0 -gt x=1+1 || ++x -eq $(tee /dev/fd/3 <<<$x) && $(echo 'nope' >&3) ]] 3>&1
+ [[ 0 -gt x=1+1 ]]
++ tee /dev/fd/2
2
+ [[ ++x -eq 2 ]]

因此,是的,可以在单个测试表达式中执行任何操作。事实上,很少有测试产生副作用,而且几乎从未用于产生输出。

也是的,保留字可以被覆盖。Bash对ksh风格的函数定义比POSIX风格更宽容(它仍然允许一些无效的名称)。

function [[ { [ "${@:1:${#@}-1}" ]; }; [[ -a -o -a -o -a ]] || echo lulz

又是一枚分叉炸弹。

if function function if function if if function & then if & fi && if & then function & fi && then function fi

类似的东西?

if [[ $1 == 'a' ]]; then
    echo "all right";
else
    echo 'Expected $1 to be "a"'
fi

不管怎样,如果你只期望一个答案,那么测试有什么意义?或者你的意思是为了调试?

[[ 'a' = 'a' ]] || echo "failed"
[[ 'b' = 'a' ]] || echo "failed"
failed

最新更新