是否可以覆盖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