2012-08-17 58 views
0

是否有可能重寫Bash的內置測試?因此,bash - 可能'重寫'測試([[ - ] --builtin?

[[ $1 = 'a' ]] 

不只是做測試,但也輸出哪些結果是預期的,當它失敗?像

echo "Expected $1 to be a.' 

編輯

東西,我知道這是不好的:-)。

+1

我不認爲你可以在bash覆蓋的運營商 - 這是不是一種語言 - 它看起來真的有點像用火箭筒射擊:)螞蟻 – Qnan 2012-08-17 11:01:36

回答

2

測試表達式複合命令會影響所有擴展的真正短路。

$ 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 ]] 

所以,是的,你可以在一次測試中表達什麼。實際上,測試產生副作用並且幾乎從未用於產生輸出是非常罕見的。

此外,保留字可以被覆蓋。對於ksh風格的函數定義,Bash比POSIX風格(它仍然允許一些無效的名稱)更寬鬆。

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

另一個的forky炸彈。

if function function if function if if \function & then \if & fi && \if & then \function & fi && then \function fi 
1

像這樣的東西?

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

無論如何,如果您只希望得到一個答案,測試有什麼意義?或者你的意思是出於調試目的?

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