0

Bashの組み込みのテストをオーバーライドすることは可能ですか?となることによって

[[ $1 = 'a' ]]

テストだけでなく、失敗したときに期待された結果も出力しますか?何かのようなもの

echo "Expected $1 to be a.'

編集

私はこれが悪いことを知っています:-)。

4

3 に答える 3

2

test expression Compoundコマンドは、すべての拡張に影響する実際の短絡を実行します。

$ 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は、POSIXスタイル(まだいくつかの無効な名前を許可している)よりもkshスタイルの関数定義に対して寛容です。

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
于 2012-08-17T11:36:28.620 に答える
1

このようなもの?

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

とにかく、1つの答えしか期待できない場合のテストのポイントは何ですか?それとも、デバッグの目的でそれを意味しますか?

于 2012-08-17T11:04:56.443 に答える
1
[[ 'a' = 'a' ]] || echo "failed"
[[ 'b' = 'a' ]] || echo "failed"
failed
于 2012-08-17T11:09:31.677 に答える