bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Should [[ -v 1 ]] be supported?


From: Peng Yu
Subject: Should [[ -v 1 ]] be supported?
Date: Wed, 26 Dec 2018 21:49:38 -0600

Hi,

[[ -v 1 ]] does not work for $1.

$ [ -v 1 ]; echo "$?"
1
$ set -- a
$ [ -v 1 ]; echo "$?"
1

Although [[ -z ${1+s} ]]  and (($#)) works for testing if $1 is set,
neither of them are uniformly better performance wise. In this case,
should [[ -v 1 ]] be supported?

set -- $(seq 1)
time for ((i=0;i<10000;++i)); do
    (($#))
done

real    0m0.140s
user    0m0.132s
sys    0m0.001s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.216s
user    0m0.151s
sys    0m0.000s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.336s
user    0m0.156s
sys    0m0.009s

set -- $(seq 10)
time for ((i=0;i<10000;++i)); do
    (($#))
done

real    0m0.224s
user    0m0.130s
sys    0m0.001s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.256s
user    0m0.147s
sys    0m0.000s

set -- $(seq 100)
time for ((i=0;i<10000;++i)); do
    (($#))
done

real    0m0.260s
user    0m0.131s
sys    0m0.001s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.244s
user    0m0.146s
sys    0m0.001s

set -- $(seq 1000)
time for ((i=0;i<10000;++i)); do
    (($#))
done

real    0m0.338s
user    0m0.167s
sys    0m0.002s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.277s
user    0m0.144s
sys    0m0.000s

set -- $(seq 10000)
time for ((i=0;i<10000;++i)); do
    (($#))
done

real    0m1.012s
user    0m0.540s
sys    0m0.011s
time for ((i=0;i<10000;++i)); do
    [[ -z ${1+s} ]]
done

real    0m0.292s
user    0m0.148s
sys    0m0.003s




-- 
Regards,
Peng



reply via email to

[Prev in Thread] Current Thread [Next in Thread]