I was looking at an answer in another thread about which bracket pair to use with if
in a bash script. [[
is less surprising and has more features such as pattern matching (=~
) whereas [
and test
are built-in and POSIX compliant making them portable.
Recently, I was attempting to test the result of a grep
command and it was failing with [: too many arguments
. I was using [
. But, when I switched to [[
it worked. How would I do such a test with [
in order to maintain the portability?
This is the test that failed:
#!/bin/bash
cat > slew_pattern << EOF
g -x"$
EOF
if [ $(grep -E -f slew_pattern /etc/sysconfig/ntpd) ]; then
echo "slew mode"
else
echo "not slew mode"
fi
And the test that succeeded:
#!/bin/bash
cat > slew_pattern << EOF
g -x"$
EOF
if [[ $(grep -E -f slew_pattern /etc/sysconfig/ntpd) ]]; then
echo "slew mode"
else
echo "not slew mode"
fi