#!/bin/bash
doContain( ) {
reqsubstr ="$1"
shift
string ="$@"
if [ -z "${string##*$reqsubstr*} " ] ;then
# echo "String '$string' contain substring: '$reqsubstr'.";
true
else
# echo "String '$string' don't contain substring: '$reqsubstr'."
false
fi
}
export -f doContain
nst ='a=two;b=onetwothree; x=100000; while [ $x -gt 0 ]; do TEST ; x=$(($x-1)); done'
nst ='a=nonesvch;
b=nosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatchnosuchmatch;
for((x=0; x<10000; ++x)); do TEST && { echo FAIL; exit 127; }; done'
:<< \=cut
for TEST in '[[ $b =~ $a ]]' '[ "${b/$a//}" = "$b" ]' '[[ $b == *$a* ]]' \
'case $b in *$a*):;;esac' 'doContain "$a" "$b"' ; do
printf '%s ' "$TEST "
/ usr/ bin/ time bash -c "${nst/TEST/$TEST} "
done
=cut
for TEST in '[[ $b =~ $a ]]' '! [ "${b/$a//}" = "$b" ]' '[[ $b == *$a* ]]' \
'case $b in *$a*):;; *) false;; esac' 'doContain "$b" "$a"' ; do
printf '%s ' "$TEST " >& 2
time bash -c "${nst/TEST/$TEST} "
done
IyEvYmluL2Jhc2gKCmRvQ29udGFpbigpIHsKICAgIHJlcXN1YnN0cj0iJDEiCiAgICBzaGlmdAogICAgc3RyaW5nPSIkQCIKICAgIGlmIFsgLXogIiR7c3RyaW5nIyMqJHJlcXN1YnN0cip9IiBdIDt0aGVuCiAgICAgICAgIyBlY2hvICJTdHJpbmcgJyRzdHJpbmcnIGNvbnRhaW4gc3Vic3RyaW5nOiAnJHJlcXN1YnN0cicuIjsKICAgICAgICB0cnVlCiAgICAgIGVsc2UKICAgICAgICAjIGVjaG8gIlN0cmluZyAnJHN0cmluZycgZG9uJ3QgY29udGFpbiBzdWJzdHJpbmc6ICckcmVxc3Vic3RyJy4iCglmYWxzZQogICAgZmkKfQoKZXhwb3J0IC1mIGRvQ29udGFpbgoKbnN0PSdhPXR3bztiPW9uZXR3b3RocmVlOyB4PTEwMDAwMDsgd2hpbGUgWyAkeCAtZ3QgMCBdOyBkbyBURVNUIDsgeD0kKCgkeC0xKSk7IGRvbmUnCm5zdD0nYT1ub25lc3ZjaDsKYj1ub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaG5vc3VjaG1hdGNobm9zdWNobWF0Y2hub3N1Y2htYXRjaDsKZm9yKCh4PTA7IHg8MTAwMDA7ICsreCkpOyBkbyBURVNUICYmIHsgZWNobyBGQUlMOyBleGl0IDEyNzsgfTsgZG9uZScKOjw8XD1jdXQKZm9yIFRFU1QgaW4gJ1tbICRiID1+ICRhIF1dJyAnWyAiJHtiLyRhLy99IiA9ICIkYiIgXScgJ1tbICRiID09ICokYSogXV0nIFwKICAgICAgICAnY2FzZSAkYiBpbiAqJGEqKTo7O2VzYWMnICdkb0NvbnRhaW4gIiRhIiAiJGIiJzsgZG8KICAgIHByaW50ZiAnJXMgJyAiJFRFU1QiCiAgICAvdXNyL2Jpbi90aW1lIGJhc2ggLWMgIiR7bnN0L1RFU1QvJFRFU1R9Igpkb25lCj1jdXQKZm9yIFRFU1QgaW4gJ1tbICRiID1+ICRhIF1dJyAnISBbICIke2IvJGEvL30iID0gIiRiIiBdJyAnW1sgJGIgPT0gKiRhKiBdXScgXAogICAgICAgICdjYXNlICRiIGluICokYSopOjs7ICopIGZhbHNlOzsgZXNhYycgJ2RvQ29udGFpbiAiJGIiICIkYSInOyBkbwogICAgcHJpbnRmICclcyAnICIkVEVTVCIgPiYyCiAgICB0aW1lIGJhc2ggLWMgIiR7bnN0L1RFU1QvJFRFU1R9Igpkb25lCg==