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