Bashの組み込みのテストをオーバーライドすることは可能ですか?となることによって
[[ $1 = 'a' ]]
テストだけでなく、失敗したときに期待された結果も出力しますか?何かのようなもの
echo "Expected $1 to be a.'
編集
私はこれが悪いことを知っています:-)。
Bashの組み込みのテストをオーバーライドすることは可能ですか?となることによって
[[ $1 = 'a' ]]
テストだけでなく、失敗したときに期待された結果も出力しますか?何かのようなもの
echo "Expected $1 to be a.'
編集
私はこれが悪いことを知っています:-)。
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
このようなもの?
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