Take the following script as an example:
#!/bin/sh
# script1-portable.sh
part="$(seq 1 100000)"
for i in $(seq 1 10); do
seq="${part}"
seq="${seq}${part}"
done
$ time bash script1-portable.sh user 0m20.837s
Now, compare to the following script that uses += :
#!/bin/sh
# script1-bash.sh
part="$(seq 1 100000)"
for i in $(seq 1 10); do
seq="${part}"
seq+="${part}"
done
$ time bash script1-bash.sh user 0m14.227s
Yes, it's faster. However, when the first script is run with dash:
$ time dash script1-portable.sh user 0m0.609s
[[ is another example:
#!/bin/sh # script2-portable.sh a="$(seq 1 100000)"; b="$(seq 1 100)" for i in $(seq 1 10); do [ "$a" = "$b" ] done
$ time bash script2-portable.sh user 0m9.148s
And the version using the bashism:
#!/bin/sh # script2-bash.sh a="$(seq 1 100000)"; b="$(seq 1 100)" for i in $(seq 1 10); do [[ $a = $b ]] done
$ time bash script2-bash.sh user 0m4.223s
Then again, the bash way is faster, yet it doesn't compare to dash:
$ time dash script2-portable.sh user 0m0.588s