是否可以覆盖 Bash 的内置测试?以便
[[ $1 = 'a' ]]
不仅进行测试,还输出失败时预期的结果?就像是
echo "Expected $1 to be a.'
编辑
我知道这很糟糕:-)。
是否可以覆盖 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