Some of the system scripts make inconsistent use of ksh-specific
features, specifically "print" and "[[" as efficient replacements for
"echo" and "[". This change makes the /etc/ksh.kshrc and all the rc
scripts use "print" and "[[" exclusively.

Switching from echo to print only brought up one interesting issue:
/etc/rc.d/mountd uses "print -n >foo" instead of "touch foo".
The latter is arguably more transparent but I didn't change to it.

Switching from [ to [[ makes a lot of things more readable; most of
the improvements result from removing unnecessary quotation marks.
We also don't have to test for unset variables as aggressively; a
number of awkward [ X"$foo" = XYes ] constructions were replaced
with [[ $foo = Yes ]] .

The test [[ ${_args} = "${_args# }" ]] appears in rcctl; I left the
quotation marks on the right-hand side because I'm afraid of breaking
something I don't understand.

The rcctl script also has a lot of lines like:
        daemon_timeout="$(svc_getdef ${_svc} timeout)"
I think the quotation marks are unnecessary but the original author
went to a lot of trouble to escape internal quotes, e.g.
        daemon_flags="$(eval print \"\${${_svc}_flags}\")"
so I'll give him the benefit of the doubt. I would encourage somone
with greater confidence to take a closer look.

I replaced `backticks` with $(subshell notation) in a few places, but
only in places where I was already changing [ to [[. I wanted to remove
them all but I can't really justify the change in terms of either
readability or process efficiency.

Regarding numeric changes: in ksh, [[ 0 -eq 00 ]] is true (numeric
comparison) but [[ 0 = 00 ]] is false (string comparison). The latter
is more readable, so I made the switch in places where the left-hand
side is a system output, e.g. [[ $(id -u ) = 0 ]] or [[ $# > 0 ]].
I would not expect id(1) to print the string "00" for root, nor would
I expect the shell to print "00" for $#. But I did *not* change
comparison operators in more complicated situations, like the bottom
of /etc/rc which has [[ ${daemon_rtable} -eq 0 ]]. It isn't immediately
obvious what sort of string is in ${daemon_rtable} so the numeric
comparison seems appropriate here.

I corrected a comment at the top of /etc/rc; it said that "set +o sh"
turned Strict Bourne shell mode off. I'm pretty sure it's actually
turning strict mode on.

My system still boots with these changes, and rcctl still appears to
work. I can't easily test all of the code paths in each of the rc
scripts. But the changes involved here are straightforward, and you
can validate this diff line-by-line.


Index: etc/ksh.kshrc
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/ksh.kshrc,v
retrieving revision 1.20
diff -u -p -u -r1.20 ksh.kshrc
--- etc/ksh.kshrc       18 Feb 2015 08:39:32 -0000      1.20
+++ etc/ksh.kshrc       5 Sep 2016 04:03:43 -0000
@@ -62,7 +62,7 @@ case "$-" in
        case "$TERM" in
        sun*-s)
                # sun console with status line
-               if [ "$tty" != "$console" ]; then
+               if [[ $tty != $console ]]; then
                        # ilabel
                        ILS='\033]L'; ILE='\033\\'
                        # window title bar
@@ -81,7 +81,7 @@ case "$-" in
        *)      ;;
        esac
        # do we want window decorations?
-       if [ "$ILS" ]; then
+       if [[ -n $ILS ]]; then
                function ilabel { print -n "${ILS}$*${ILE}">/dev/tty; }
                function label { print -n "${WLS}$*${WLE}">/dev/tty; }
 
@@ -136,14 +136,14 @@ function no_path {
 }
 # if $1 exists and is not in path, append it
 function add_path {
-  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
+  [[ -d ${1:-.} ]] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
 }
 # if $1 exists and is not in path, prepend it
 function pre_path {
-  [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
+  [[ -d ${1:-.} ]] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
 }
 # if $1 is in path, remove it
 function del_path {
-  no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
+  no_path $* || eval ${2:-PATH}=`eval print :'$'${2:-PATH}: |
     sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
 }
Index: etc/rc
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc,v
retrieving revision 1.486
diff -u -p -u -r1.486 rc
--- etc/rc      10 Jul 2016 09:08:18 -0000      1.486
+++ etc/rc      4 Sep 2016 14:26:10 -0000
@@ -4,7 +4,7 @@
 # Output and error are redirected to console by init, and the console is the
 # controlling terminal.
 
-# Turn off Strict Bourne shell.
+# Turn on Strict Bourne shell.
 set +o sh
 
 # Subroutines (have to come first).
@@ -137,14 +137,14 @@ make_keys() {
        local _iked_pub=/etc/iked/local.pub
 
        if [[ ! -f $_isakmpd_key ]]; then
-               echo -n "openssl: generating isakmpd/iked RSA keys... "
+               print -n "openssl: generating isakmpd/iked RSA keys... "
                if openssl genrsa -out $_isakmpd_key 2048 >/dev/null 2>&1 &&
                        chmod 600 $_isakmpd_key &&
                        openssl rsa -out $_isakmpd_pub -in $_isakmpd_key \
                            -pubout >/dev/null 2>&1; then
-                       echo done.
+                       print done.
                else
-                       echo failed.
+                       print failed.
                fi
        fi
 
@@ -167,7 +167,7 @@ reorder_libs() {
        # Skip if /usr/lib is on a nfs mounted filesystem.
        [[ $_mp == *' type nfs '* ]] && return
 
-       echo -n 'reordering libraries:'
+       print -n 'reordering libraries:'
 
        # Only choose the latest version of the libraries.
        for _liba in /usr/lib/libc.so.*.a; do
@@ -183,7 +183,7 @@ reorder_libs() {
                if mount -u -w $_dkdev; then
                        _remount=true
                else
-                       echo ' failed.'
+                       print ' failed.'
                        return
                fi
        fi
@@ -210,9 +210,9 @@ reorder_libs() {
        fi
 
        if $_error; then
-               echo ' failed.'
+               print ' failed.'
        else
-               echo ' done.'
+               print ' done.'
        fi
 }
 
@@ -237,21 +237,21 @@ do_fsck() {
        0)      ;;
        2)      exit 1
                ;;
-       4)      echo "Rebooting..."
+       4)      print "Rebooting..."
                reboot
-               echo "Reboot failed; help!"
+               print "Reboot failed; help!"
                exit 1
                ;;
-       8)      echo "Automatic file system check failed; help!"
+       8)      print "Automatic file system check failed; help!"
                exit 1
                ;;
-       12)     echo "Boot interrupted."
+       12)     print "Boot interrupted."
                exit 1
                ;;
        130)    # Interrupt before catcher installed.
                exit 1
                ;;
-       *)      echo "Unknown error; help!"
+       *)      print "Unknown error; help!"
                exit 1
                ;;
        esac
@@ -282,26 +282,26 @@ FUNCS_ONLY=1 . /etc/rc.d/rc.subr
 _rc_parse_conf
 
 if [[ $1 == shutdown ]]; then
-       if echo 2>/dev/null >>/var/db/host.random || \
-           echo 2>/dev/null >>/etc/random.seed; then
+       if print 2>/dev/null >>/var/db/host.random || \
+           print 2>/dev/null >>/etc/random.seed; then
                random_seed
        else
-               echo warning: cannot write random seed to disk
+               print warning: cannot write random seed to disk
        fi
 
        # If we are in secure level 0, assume single user mode.
        if (($(sysctl -n kern.securelevel) == 0)); then
-               echo 'single user: not running shutdown scripts'
+               print 'single user: not running shutdown scripts'
        else
                pkg_scripts=${pkg_scripts%%*( )}
                if [[ -n $pkg_scripts ]]; then
-                       echo -n 'stopping package daemons:'
+                       print -n 'stopping package daemons:'
                        while [[ -n $pkg_scripts ]]; do
                                _d=${pkg_scripts##* }
                                pkg_scripts=${pkg_scripts%%*( )$_d}
                                [[ -x /etc/rc.d/$_d ]] && /etc/rc.d/$_d stop
                        done
-                       echo '.'
+                       print '.'
                fi
 
                [[ -f /etc/rc.shutdown ]] && sh /etc/rc.shutdown
@@ -319,13 +319,13 @@ fi
 swapctl -A -t blk
 
 if [[ -e /fastboot ]]; then
-       echo "Fast boot: skipping disk checks."
+       print "Fast boot: skipping disk checks."
 elif [[ $1 == autoboot ]]; then
-       echo "Automatic boot in progress: starting file system checks."
+       print "Automatic boot in progress: starting file system checks."
        do_fsck
 fi
 
-trap "echo 'Boot interrupted.'; exit 1" 3
+trap "print 'Boot interrupted.'; exit 1" 3
 
 umount -a >/dev/null 2>&1
 mount -a -t nonfs,vnd
@@ -333,7 +333,7 @@ mount -uw /         # root on nfs requires this
 rm -f /fastboot                # XXX (root now writeable)
 
 # Set flags on ttys.  (Do early, in case they use tty for SLIP in netstart.)
-echo 'setting tty flags'
+print 'setting tty flags'
 ttyflags -a
 
 # Set keyboard encoding.
@@ -378,7 +378,7 @@ fill_baddynamic tcp
 
 sysctl_conf
 
-echo 'starting network'
+print 'starting network'
 
 # Set carp interlock by increasing the demotion counter.
 # Prevents carp from preempting until the system is booted.
@@ -420,24 +420,24 @@ dmesg >/var/run/dmesg.boot        # Save a copy
 
 make_keys
 
-echo -n 'starting early daemons:'
+print -n 'starting early daemons:'
 start_daemon syslogd ldattach pflogd nsd rebound unbound ntpd
 start_daemon iscsid isakmpd iked sasyncd ldapd npppd
-echo '.'
+print '.'
 
 # Load IPsec rules.
 if [[ $ipsec != NO && -f /etc/ipsec.conf ]]; then
        ipsecctl -f /etc/ipsec.conf
 fi
 
-echo -n 'starting RPC daemons:'
+print -n 'starting RPC daemons:'
 start_daemon portmap ypldap
 rm -f /var/run/ypbind.lock
 if [[ -n $(domainname) ]]; then
        start_daemon ypserv ypbind
 fi
 start_daemon mountd nfsd lockd statd amd
-echo '.'
+print '.'
 
 # Check and mount remaining file systems and enable additional swap.
 mount -a
@@ -452,9 +452,9 @@ if [[ -d /var/crash ]]; then
 fi
 
 if [[ $check_quotas == YES ]]; then
-       echo -n 'checking quotas:'
+       print -n 'checking quotas:'
        quotacheck -a
-       echo ' done.'
+       print ' done.'
        quotaon -a
 fi
 
@@ -472,7 +472,7 @@ if [[ -f /etc/ptmp ]]; then
            'password file may be incorrect -- /etc/ptmp exists'
 fi
 
-echo clearing /tmp
+print clearing /tmp
 
 # Prune quickly with one rm, then use find to clean up /tmp/[lqv]*
 # (not needed with mfs /tmp, but doesn't hurt there...).
@@ -497,7 +497,7 @@ if [[ ! -f /etc/motd ]]; then
 fi
 if T=$(mktemp /tmp/_motd.XXXXXXXXXX); then
        sysctl -n kern.version | sed 1q >$T
-       echo "" >>$T
+       print "" >>$T
        sed '1,/^$/d' </etc/motd >>$T
        cmp -s $T /etc/motd || cp $T /etc/motd
        rm -f $T
@@ -505,23 +505,23 @@ fi
 
 if [[ $accounting == YES ]]; then
        [[ ! -f /var/account/acct ]] && touch /var/account/acct
-       echo 'turning on accounting'
+       print 'turning on accounting'
        accton /var/account/acct
 fi
 
 if [[ -x /sbin/ldconfig ]]; then
-       echo 'creating runtime link editor directory cache.'
+       print 'creating runtime link editor directory cache.'
        [[ -d /usr/local/lib ]] && shlib_dirs="/usr/local/lib $shlib_dirs"
        [[ -d /usr/X11R6/lib ]] && shlib_dirs="/usr/X11R6/lib $shlib_dirs"
        ldconfig $shlib_dirs
 fi
 
-echo 'preserving editor files.'; /usr/libexec/vi.recover
+print 'preserving editor files.'; /usr/libexec/vi.recover
 
 # If rc.sysmerge exists, run it just once, and make sure it is deleted.
 run_upgrade_script sysmerge
 
-echo -n 'starting network daemons:'
+print -n 'starting network daemons:'
 start_daemon ldomd vmd sshd snmpd ldpd ripd ospfd ospf6d bgpd ifstated
 start_daemon relayd dhcpd dhcrelay mrouted dvmrpd radiusd eigrpd
 
@@ -534,22 +534,22 @@ fi
 start_daemon hostapd lpd smtpd slowcgi httpd ftpd
 start_daemon ftpproxy ftpproxy6 tftpd tftpproxy identd inetd rarpd bootparamd
 start_daemon rbootd mopd spamd spamlogd sndiod
-echo '.'
+print '.'
 
 # If rc.firsttime exists, run it just once, and make sure it is deleted.
 run_upgrade_script firsttime
 
 # Run rc.d(8) scripts from packages.
 if [[ -n $pkg_scripts ]]; then
-       echo -n 'starting package daemons:'
+       print -n 'starting package daemons:'
        for _daemon in $pkg_scripts; do
                if [[ -x /etc/rc.d/$_daemon ]]; then
                        start_daemon $_daemon
                else
-                       echo -n " ${_daemon}(absent)"
+                       print -n " ${_daemon}(absent)"
                fi
        done
-       echo '.'
+       print '.'
 fi
 
 [[ -f /etc/rc.local ]] && sh /etc/rc.local
@@ -558,9 +558,9 @@ ifconfig -g carp -carpdemote 128    # Disab
 
 mixerctl_conf
 
-echo -n 'starting local daemons:'
+print -n 'starting local daemons:'
 start_daemon apmd sensorsd hotplugd watchdogd cron wsmoused xdm
-echo '.'
+print '.'
 
 date
 exit 0
Index: etc/rc.d/amd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/amd,v
retrieving revision 1.7
diff -u -p -u -r1.7 amd
--- etc/rc.d/amd        15 Jul 2015 13:50:54 -0000      1.7
+++ etc/rc.d/amd        5 Sep 2016 01:54:10 -0000
@@ -11,7 +11,7 @@ rc_reload=NO
 rc_stop=NO
 
 rc_pre() {
-       [ -e ${amd_master} ] || return 1
+       [[ -e ${amd_master} ]] || return 1
        daemon_flags="${daemon_flags} $(print -rn -- $(< ${amd_master}))"
 }
 
Index: etc/rc.d/bootparamd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/bootparamd,v
retrieving revision 1.2
diff -u -p -u -r1.2 bootparamd
--- etc/rc.d/bootparamd 8 Jul 2011 02:15:34 -0000       1.2
+++ etc/rc.d/bootparamd 5 Sep 2016 01:54:29 -0000
@@ -9,7 +9,7 @@ daemon="/usr/sbin/rpc.bootparamd"
 rc_reload=NO
 
 rc_pre() {
-       [ -s /etc/bootparams ]
+       [[ -s /etc/bootparams ]]
 }
 
 rc_cmd $1
Index: etc/rc.d/iked
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/iked,v
retrieving revision 1.3
diff -u -p -u -r1.3 iked
--- etc/rc.d/iked       19 Dec 2015 13:45:12 -0000      1.3
+++ etc/rc.d/iked       5 Sep 2016 02:58:28 -0000
@@ -9,7 +9,7 @@ daemon="/sbin/iked"
 pexp="iked: parent.*"
 
 rc_pre() {
-       [ X"${sasyncd_flags}" != X"NO" ] && \
+       [[ ${sasyncd_flags} != NO ]] && \
                daemon_flags="-S ${daemon_flags}"
        #return 0
        # child will not return a config parsing error to the parent
Index: etc/rc.d/isakmpd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/isakmpd,v
retrieving revision 1.1
diff -u -p -u -r1.1 isakmpd
--- etc/rc.d/isakmpd    6 Jul 2011 18:55:36 -0000       1.1
+++ etc/rc.d/isakmpd    5 Sep 2016 02:57:07 -0000
@@ -9,7 +9,7 @@ daemon="/sbin/isakmpd"
 pexp="isakmpd: monitor \[priv\]"
 
 rc_pre() {
-       [ X"${sasyncd_flags}" != X"NO" ] && \
+       [[ ${sasyncd_flags} != NO ]] && \
                daemon_flags="-S ${daemon_flags}"
        return 0
 }
Index: etc/rc.d/ldattach
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/ldattach,v
retrieving revision 1.2
diff -u -p -u -r1.2 ldattach
--- etc/rc.d/ldattach   8 Jul 2011 02:15:34 -0000       1.2
+++ etc/rc.d/ldattach   5 Sep 2016 03:37:53 -0000
@@ -9,7 +9,7 @@ daemon="/sbin/ldattach"
 rc_reload=NO
 
 rc_pre() {
-       [ -n "${ldattach_flags}" ]
+       [[ -n ${ldattach_flags} ]]
 }
 
 rc_cmd $1
Index: etc/rc.d/mopd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/mopd,v
retrieving revision 1.3
diff -u -p -u -r1.3 mopd
--- etc/rc.d/mopd       19 Sep 2011 20:42:24 -0000      1.3
+++ etc/rc.d/mopd       5 Sep 2016 01:56:08 -0000
@@ -10,7 +10,7 @@ daemon_flags="-a"
 rc_reload=NO
 
 rc_pre() {
-       [ -d /tftpboot/mop ]
+       [[ -d /tftpboot/mop ]]
 }
 
 rc_cmd $1
Index: etc/rc.d/mountd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/mountd,v
retrieving revision 1.6
diff -u -p -u -r1.6 mountd
--- etc/rc.d/mountd     26 Dec 2015 09:55:15 -0000      1.6
+++ etc/rc.d/mountd     5 Sep 2016 01:56:19 -0000
@@ -10,9 +10,9 @@ pexp="mountd: \[priv\]"
 rc_stop=NO
 
 rc_pre() {
-       [ -s /etc/exports ] && grep -qv '^#' /etc/exports && \
+       [[ -s /etc/exports ]] && grep -qv '^#' /etc/exports && \
                rm -f /var/db/mountdtab && \
-               echo -n > /var/db/mountdtab
+               print -n > /var/db/mountdtab
 }
 
 rc_cmd $1
Index: etc/rc.d/nfsd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/nfsd,v
retrieving revision 1.6
diff -u -p -u -r1.6 nfsd
--- etc/rc.d/nfsd       22 Aug 2014 08:10:38 -0000      1.6
+++ etc/rc.d/nfsd       5 Sep 2016 01:56:28 -0000
@@ -12,7 +12,7 @@ pexp="(${daemon}( |$)|nfsd: (master|serv
 rc_reload=NO
 
 rc_pre() {
-       [ -s /etc/exports ] && grep -qv '^#' /etc/exports
+       [[ -s /etc/exports ]] && grep -qv '^#' /etc/exports
 }
 
 rc_cmd $1
Index: etc/rc.d/rarpd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/rarpd,v
retrieving revision 1.3
diff -u -p -u -r1.3 rarpd
--- etc/rc.d/rarpd      19 Sep 2011 20:42:24 -0000      1.3
+++ etc/rc.d/rarpd      5 Sep 2016 01:56:38 -0000
@@ -10,7 +10,7 @@ daemon_flags="-a"
 rc_reload=NO
 
 rc_pre() {
-       [ -s /etc/ethers ]
+       [[ -s /etc/ethers ]]
 }
 
 rc_cmd $1
Index: etc/rc.d/rc.subr
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/rc.subr,v
retrieving revision 1.115
diff -u -p -u -r1.115 rc.subr
--- etc/rc.d/rc.subr    31 Aug 2016 08:47:11 -0000      1.115
+++ etc/rc.d/rc.subr    5 Sep 2016 03:27:03 -0000
@@ -20,20 +20,20 @@ _rc_actions="start stop restart reload c
 readonly _rc_actions
 
 _rc_err() {
-       [ -n "${1}" ] && echo "${1}" 1>&2
-       [ -n "${2}" ] && exit "${2}" || exit 1
+       [[ -n ${1} ]] && print "${1}" 1>&2
+       [[ -n ${2} ]] && exit "${2}" || exit 1
 }
 
 _rc_not_supported() {
        local _a _enotsup _what=${1}
        for _a in ${_rc_actions}; do
-               [ "${_what}" == "restart" ] && _what="stop"
-               if [ "${_what}" == "${_a}" ]; then
+               [[ ${_what} == restart ]] && _what="stop"
+               if [[ ${_what} == ${_a} ]]; then
                        eval _enotsup=\${rc_${_what}}
                        break
                fi
        done
-       [ X"${_enotsup}" == X"NO" ]
+       [[ ${_enotsup} == NO ]]
 }
 
 _rc_usage() {
@@ -45,7 +45,7 @@ _rc_usage() {
 }
 
 _rc_write_runfile() {
-       [ -d ${_RC_RUNDIR} ] || mkdir -p ${_RC_RUNDIR} && \
+       [[ -d ${_RC_RUNDIR} ]] || mkdir -p ${_RC_RUNDIR} && \
                cat >${_RC_RUNFILE} <<EOF
 daemon_class=${daemon_class}
 daemon_flags=${daemon_flags}
@@ -61,8 +61,8 @@ _rc_rm_runfile() {
 }
 
 _rc_do() {
-       if [ -n "${_RC_DEBUG}" ]; then
-               echo "doing $@" && "$@"
+       if [[ -n ${_RC_DEBUG} ]]; then
+               print "doing $@" && "$@"
        else
                "$@" >/dev/null 2>&1
        fi
@@ -70,14 +70,14 @@ _rc_do() {
 
 _rc_exit() {
        local _pfix
-       [ -z "${INRC}" -o X"$1" != X"ok" ] && _pfix="($1)"
-       echo ${INRC:+'-n'} "${_pfix}"
-       [ X"$1" = X"ok" ] && exit 0 || exit 1
+       [[ -z ${INRC} || $1 != ok ]] && _pfix="($1)"
+       print ${INRC:+'-n'} "${_pfix}"
+       [[ $1 = ok ]] && exit 0 || exit 1
 }
 
 _rc_wait() {
        local _i=0
-       while [ $_i -lt ${daemon_timeout} ]; do
+       while [[ $_i -lt ${daemon_timeout} ]]; do
                case "$1" in
                reload|start)
                        _rc_do rc_check && return 0 ;;
@@ -95,25 +95,25 @@ _rc_wait() {
 _rc_quirks() {
        # special care needed for spamlogd to avoid starting it up and failing
        # all the time
-       if [  X"${spamd_flags}" = X"NO" -o X"${spamd_black}" != X"NO" ]; then
+       if [[  ${spamd_flags} = NO || ${spamd_black} != NO ]]; then
                spamlogd_flags=NO
        fi
 
        # special care needed for pflogd to avoid starting it up and failing
        # if pf is not enabled
-       if [ X"${pf}" = X"NO" ]; then
+       if [[ ${pf} = NO ]]; then
                pflogd_flags=NO
        fi
 
        # special care needed if nfs_server=YES to startup nfsd and mountd with
        # sane default flags
-       if [ X"${nfs_server}" = X"YES" ]; then
-               [ X"${nfsd_flags}" = X"NO" ] && nfsd_flags="-tun 4"
-               [ X"${mountd_flags}" = X"NO" ] && mountd_flags=
+       if [[ ${nfs_server} = YES ]]; then
+               [[ ${nfsd_flags} = NO ]] && nfsd_flags="-tun 4"
+               [[ ${mountd_flags} = NO ]] && mountd_flags=
        fi
 
        # in case domainname is set and /var/yp/binding exists enable ypbind
-       if [ X"`domainname`" != X"" -a -d /var/yp/binding ]; then
+       if [[ -n $(domainname) && -d /var/yp/binding ]]; then
                ypbind_flags=
        fi
 }
@@ -125,7 +125,7 @@ _rc_parse_conf() {
                accounting amd_master check_quotas ipsec multicast nfs_server \
                pexp pf pkg_scripts shlib_dirs spamd_black
 
-       [ $# -gt 0 ] || set -- /etc/rc.conf /etc/rc.conf.local
+       [[ $# > 0 ]] || set -- /etc/rc.conf /etc/rc.conf.local
        for _rcfile; do
                [[ -f $_rcfile ]] || continue
                while IFS='     ' read -r _l; do
@@ -148,7 +148,7 @@ _rc_parse_conf() {
 }
 
 # return if we only want internal functions
-[ -n "${FUNCS_ONLY}" ] && return
+[[ -n ${FUNCS_ONLY} ]] && return
 
 rc_start() {
        ${rcexec} "${daemon} ${daemon_flags} ${_bg}"
@@ -169,34 +169,35 @@ rc_stop() {
 rc_cmd() {
        local _bg _n
 
-       [ -n "${1}" ] && echo "${_rc_actions}" | grep -qw -- ${1} || _rc_usage
+       [[ -n ${1} ]] && print "${_rc_actions}" | grep -qw -- ${1} || \
+               _rc_usage
 
-       [ "$(id -u)" -eq 0 ] || \
-               [ X"${rc_usercheck}" != X"NO" -a X"$1" = "Xcheck" ] || \
+       [[ $(id -u) = 0 ]] || \
+               [[ ${rc_usercheck} != NO && $1 = check ]] || \
                _rc_err "$0: need root privileges"
 
        if _rc_not_supported $1; then
-               [ -n "${INRC}" ] && exit 1
+               [[ -n ${INRC} ]] && exit 1
                _rc_err "$0: $1 is not supported"
        fi
 
-       [ X"${rc_bg}" = X"YES" ] && _bg="&"
-       [ -n "${_RC_DEBUG}" ] || _n="-n"
+       [[ ${rc_bg} = YES ]] && _bg="&"
+       [[ -n ${_RC_DEBUG} ]] || _n="-n"
 
        _rc_do _rc_parse_conf ${_RC_RUNFILE}
 
        case "$1" in
        check)
-               echo $_n "${INRC:+ }${_name}"
+               print $_n "${INRC:+ }${_name}"
                _rc_do rc_check && _rc_exit ok
                _rc_exit failed
                ;;
        start)
-               if [ X"${daemon_flags}" = X"NO" ]; then
+               if [[ ${daemon_flags} = NO ]]; then
                        _rc_err "$0: need -f to force $1 since 
${_name}_flags=NO"
                fi
-               [ -z "${INRC}" ] && _rc_do rc_check && exit 0
-               echo $_n "${INRC:+ }${_name}"
+               [[ -z ${INRC} ]] && _rc_do rc_check && exit 0
+               print $_n "${INRC:+ }${_name}"
                while true; do  # no real loop, only needed to break
                        if type rc_pre >/dev/null; then
                                _rc_do rc_pre || break
@@ -213,7 +214,7 @@ rc_cmd() {
                ;;
        stop)
                _rc_do rc_check || exit 0
-               echo $_n "${INRC:+ }${_name}"
+               print $_n "${INRC:+ }${_name}"
                _rc_do rc_stop || _rc_exit failed
                _rc_do _rc_wait stop || _rc_exit failed
                if type rc_post >/dev/null; then \
@@ -223,7 +224,7 @@ rc_cmd() {
                _rc_exit ok
                ;;
        reload)
-               echo $_n "${INRC:+ }${_name}"
+               print $_n "${INRC:+ }${_name}"
                _rc_do rc_check && _rc_do rc_reload || _rc_exit failed
                _rc_do _rc_wait reload || _rc_exit failed
                _rc_exit ok
@@ -238,7 +239,7 @@ rc_cmd() {
        esac
 }
 
-[ -n "${daemon}" ] || _rc_err "$0: daemon is not set"
+[[ -n ${daemon} ]] || _rc_err "$0: daemon is not set"
 
 unset _RC_DEBUG _RC_FORCE
 while getopts "df" c; do
@@ -265,28 +266,28 @@ eval _rctimeout=\${${_name}_timeout}
 # set default values; duplicated in rcctl(8)
 getcap -f /etc/login.conf ${_name} 1>/dev/null 2>&1 && \
        daemon_class=${_name} || daemon_class=daemon
-[ -z "${daemon_rtable}" ] && daemon_rtable=0
-[ -z "${daemon_user}" ] && daemon_user=root
-[ -z "${daemon_timeout}" ] && daemon_timeout=30
+[[ -z ${daemon_rtable} ]] && daemon_rtable=0
+[[ -z ${daemon_user} ]] && daemon_user=root
+[[ -z ${daemon_timeout} ]] && daemon_timeout=30
 
 # use flags from the rc.d script if daemon is not enabled
-[ -n "${_RC_FORCE}" -o "$1" != "start" ] && [ X"${_rcflags}" = X"NO" ] && \
+[[ -n ${_RC_FORCE} || $1 != start ]] && [[ ${_rcflags} = NO ]] && \
        unset _rcflags
 
-[ -n "${_rcflags}" ] && daemon_flags=${_rcflags}
-[ -n "${_rcrtable}" ] && daemon_rtable=${_rcrtable}
-[ -n "${_rcuser}" ] && daemon_user=${_rcuser}
-[ -n "${_rctimeout}" ] && daemon_timeout=${_rctimeout}
-
-if [ -n "${_RC_DEBUG}" ]; then
-       echo -n "${_name}_flags "
-       [ -n "${_rcflags}" ] || echo -n "empty, using default "
-       echo ">${daemon_flags}<"
+[[ -n ${_rcflags} ]] && daemon_flags=${_rcflags}
+[[ -n ${_rcrtable} ]] && daemon_rtable=${_rcrtable}
+[[ -n ${_rcuser} ]] && daemon_user=${_rcuser}
+[[ -n ${_rctimeout} ]] && daemon_timeout=${_rctimeout}
+
+if [[ -n ${_RC_DEBUG} ]]; then
+       print -n "${_name}_flags "
+       [[ -n ${_rcflags} ]] || print -n "empty, using default "
+       print ">${daemon_flags}<"
 fi
 
 readonly daemon_class
 unset _rcflags _rcrtable _rcuser _rctimeout
 pexp="${daemon}${daemon_flags:+ ${daemon_flags}}"
 rcexec="su -l -c ${daemon_class} -s /bin/sh ${daemon_user} -c"
-[ "${daemon_rtable}" -eq 0 ] || \
+[[ ${daemon_rtable} -eq 0 ]] || \
        rcexec="route -T ${daemon_rtable} exec ${rcexec}"
Index: etc/rc.d/spamd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/spamd,v
retrieving revision 1.7
diff -u -p -u -r1.7 spamd
--- etc/rc.d/spamd      15 Jul 2015 13:50:54 -0000      1.7
+++ etc/rc.d/spamd      5 Sep 2016 03:36:37 -0000
@@ -10,7 +10,7 @@ pexp="spamd: \[priv\].*"
 rc_reload=NO
 
 rc_pre() {
-       [ X"${spamd_black}" != X"NO" ] && \
+       [[ ${spamd_black} != NO ]] && \
                daemon_flags="-b ${daemon_flags}"
        return 0
 }
@@ -18,7 +18,7 @@ rc_pre() {
 rc_start() {
        ${rcexec} "${daemon} ${daemon_flags}" || return 1
        spamd_setup_flags="-D"
-       [ X"${spamd_black}" != X"NO" ] && \
+       [[ ${spamd_black} != NO ]] && \
                spamd_setup_flags="-b ${spamd_setup_flags}"
        /usr/libexec/spamd-setup ${spamd_setup_flags}
 }
Index: etc/rc.d/spamlogd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/spamlogd,v
retrieving revision 1.2
diff -u -p -u -r1.2 spamlogd
--- etc/rc.d/spamlogd   8 Aug 2011 17:13:31 -0000       1.2
+++ etc/rc.d/spamlogd   5 Sep 2016 03:37:22 -0000
@@ -9,7 +9,7 @@ daemon="/usr/libexec/spamlogd"
 rc_reload=NO
 
 rc_pre() {
-       [  X"${spamd_flags}" != X"NO" -a X"${spamd_black}" = X"NO" ]
+       [[ ${spamd_flags} != X"NO" && ${spamd_black} = NO ]]
        if pfctl -si | grep -q Enabled; then
                ifconfig pflog0 create
                if ifconfig pflog0; then
Index: etc/rc.d/ypbind
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/ypbind,v
retrieving revision 1.5
diff -u -p -u -r1.5 ypbind
--- etc/rc.d/ypbind     18 Oct 2015 03:51:11 -0000      1.5
+++ etc/rc.d/ypbind     5 Sep 2016 03:31:40 -0000
@@ -10,7 +10,7 @@ rc_bg=YES
 rc_reload=NO
 
 rc_pre() {
-       [ X"`domainname`" != X"" ]
+       [[ -n $(domainname) ]]
 }
 
 rc_post() {
Index: etc/rc.d/yppasswdd
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/yppasswdd,v
retrieving revision 1.4
diff -u -p -u -r1.4 yppasswdd
--- etc/rc.d/yppasswdd  8 Jul 2011 04:29:54 -0000       1.4
+++ etc/rc.d/yppasswdd  5 Sep 2016 03:33:16 -0000
@@ -9,20 +9,20 @@ daemon="/usr/sbin/rpc.yppasswdd"
 rc_reload=NO
 
 rc_pre() {
-       [ X"`domainname`" != X"" -a -d /var/yp/`domainname` ] || \
+       [[ -n $(domainname) && -d /var/yp/$(domainname) ]] || \
                return 1
        _host1=`ypwhich -m passwd 2> /dev/null`
        _host2=`hostname`
-       if [ `grep '^lookup' /etc/resolv.conf | grep yp | wc -c` -ne 0 ]; then
+       if [[ `grep '^lookup' /etc/resolv.conf | grep yp | wc -c` -ne 0 ]]; then
                _host1=`ypmatch $_host1 hosts | cut -d' ' -f2`
                _host2=`ypmatch $_host2 hosts | cut -d' ' -f2 | head -1`
        else
-               _host1=`echo $_host1 | nslookup | grep '^Name: ' | \
+               _host1=`print $_host1 | nslookup | grep '^Name: ' | \
                        sed -e 's/^Name:    //'`
-               _host2=`echo $_host2 | nslookup | grep '^Name: ' | \
+               _host2=`print $_host2 | nslookup | grep '^Name: ' | \
                        sed -e 's/^Name:    //'`
        fi
-       [ "$_host2" = "$_host1" ]
+       [[ $_host2 = $_host1 ]]
 }
 
 rc_cmd $1
Index: etc/rc.d/ypserv
===================================================================
RCS file: /open/anoncvs/cvs/src/etc/rc.d/ypserv,v
retrieving revision 1.4
diff -u -p -u -r1.4 ypserv
--- etc/rc.d/ypserv     6 Oct 2011 06:47:50 -0000       1.4
+++ etc/rc.d/ypserv     5 Sep 2016 02:17:52 -0000
@@ -7,7 +7,7 @@ daemon="/usr/sbin/ypserv"
 . /etc/rc.d/rc.subr
 
 rc_pre() {
-       [ X"`domainname`" != X"" -a -d /var/yp/`domainname` ]
+       [[ -n $(domainname) && -d /var/yp/$(domainname) ]]
 }
 
 rc_cmd $1
Index: usr.sbin/rcctl/rcctl.sh
===================================================================
RCS file: /open/anoncvs/cvs/src/usr.sbin/rcctl/rcctl.sh,v
retrieving revision 1.104
diff -u -p -u -r1.104 rcctl.sh
--- usr.sbin/rcctl/rcctl.sh     30 Jul 2016 06:25:21 -0000      1.104
+++ usr.sbin/rcctl/rcctl.sh     5 Sep 2016 03:55:04 -0000
@@ -28,7 +28,7 @@ _rc_parse_conf
 usage()
 {
        local _a _i
-       for _i in ${_rc_actions}; do _a="$(echo -n ${_i}${_a:+|${_a}})"; done
+       for _i in ${_rc_actions}; do _a="$(print -n ${_i}${_a:+|${_a}})"; done
 
        _rc_err \
        "usage: rcctl get|getdef|set service | daemon [variable [arguments]]
@@ -39,7 +39,7 @@ usage()
 
 needs_root()
 {
-       [ "$(id -u)" -ne 0 ] && _rc_err "${0##*/}: \"$*\" needs root privileges"
+       [[ $(id -u) = 0 ]] || _rc_err "${0##*/}: \"$*\" needs root privileges"
 }
 
 rcctl_err()
@@ -54,21 +54,21 @@ ls_rcscripts()
        cd /etc/rc.d && set -- *
        for _s; do
                [[ ${_s} = *.* ]] && continue
-               [ ! -d "${_s}" ] && echo "${_s}"
+               [[ ! -d "${_s}" ]] && print "${_s}"
        done
 }
 
 pkg_scripts_append()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        rcconf_edit_begin
-       if [ -z "${pkg_scripts}" ]; then
-               echo pkg_scripts="${_svc}" >>${_TMP_RCCONF}
-       elif ! echo ${pkg_scripts} | grep -qw -- ${_svc}; then
+       if [[ -z ${pkg_scripts} ]]; then
+               print pkg_scripts="${_svc}" >>${_TMP_RCCONF}
+       elif ! print ${pkg_scripts} | grep -qw -- ${_svc}; then
                grep -v "^pkg_scripts.*=" /etc/rc.conf.local >${_TMP_RCCONF}
-               echo pkg_scripts="${pkg_scripts} ${_svc}" >>${_TMP_RCCONF}
+               print pkg_scripts="${pkg_scripts} ${_svc}" >>${_TMP_RCCONF}
        fi
        rcconf_edit_end
 }
@@ -76,7 +76,7 @@ pkg_scripts_append()
 pkg_scripts_order()
 {
        local _svcs="$*"
-       [ -n "${_svcs}" ] || return
+       [[ -n ${_svcs} ]] || return
 
        needs_root ${action}
        local _pkg_scripts _svc
@@ -87,20 +87,20 @@ pkg_scripts_order()
                        rcctl_err "${_svc} is not enabled"
                fi
        done
-       _pkg_scripts=$(echo "${_svcs} ${pkg_scripts}" | tr "[:blank:]" "\n" | \
+       _pkg_scripts=$(print "${_svcs} ${pkg_scripts}" | tr "[:blank:]" "\n" | \
                     awk -v ORS=' ' '!x[$0]++')
        rcconf_edit_begin
        grep -v "^pkg_scripts.*=" /etc/rc.conf.local >${_TMP_RCCONF}
-       echo pkg_scripts=${_pkg_scripts} >>${_TMP_RCCONF}
+       print pkg_scripts=${_pkg_scripts} >>${_TMP_RCCONF}
        rcconf_edit_end
 }
 
 pkg_scripts_rm()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
-       [ -z "${pkg_scripts}" ] && return
+       [[ -z ${pkg_scripts} ]] && return
 
        rcconf_edit_begin
        sed "/^pkg_scripts[[:>:]]/{s/[[:<:]]${_svc}[[:>:]]//g
@@ -113,7 +113,7 @@ rcconf_edit_begin()
 {
        _TMP_RCCONF=$(mktemp -p /etc -t rc.conf.local.XXXXXXXXXX) || \
                rcctl_err "cannot create temporary file under /etc"
-       if [ -f /etc/rc.conf.local ]; then
+       if [[ -f /etc/rc.conf.local ]]; then
                cat /etc/rc.conf.local >${_TMP_RCCONF} || \
                        rcctl_err "cannot append to ${_TMP_RCCONF}"
        else
@@ -128,7 +128,7 @@ rcconf_edit_end()
                rcctl_err "cannot modify ${_TMP_RCCONF}"
        cat ${_TMP_RCCONF} >/etc/rc.conf.local || \
                rcctl_err "cannot append to /etc/rc.conf.local"
-       if [ ! -s /etc/rc.conf.local ]; then
+       if [[ ! -s /etc/rc.conf.local ]]; then
                rm /etc/rc.conf.local || \
                        rcctl_err "cannot remove /etc/rc.conf.local"
        fi
@@ -139,21 +139,21 @@ rcconf_edit_end()
 svc_is_avail()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
-       [ -x "/etc/rc.d/${_svc}" ] && return
+       [[ -x /etc/rc.d/${_svc} ]] && return
        svc_is_special ${_svc}
 }
 
 svc_is_base()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        local _cached _ret
 
-       _cached=$(eval echo \${cached_svc_is_base_${_svc}})
-       [ "${_cached}" ] && return "${_cached}"
+       _cached=$(eval print \${cached_svc_is_base_${_svc}})
+       [[ -n ${_cached} ]] && return "${_cached}"
 
        grep -qw "^${_svc}_flags" /etc/rc.conf
        _ret=$?
@@ -165,14 +165,14 @@ svc_is_base()
 svc_is_meta()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        local _cached _ret
 
-       _cached=$(eval echo \${cached_svc_is_meta_${_svc}})
-       [ "${_cached}" ] && return "${_cached}"
+       _cached=$(eval print \${cached_svc_is_meta_${_svc}})
+       [[ -n ${_cached} ]] && return "${_cached}"
 
-       [ -r "/etc/rc.d/${_svc}" ] && ! grep -qw "^rc_cmd" /etc/rc.d/${_svc}
+       [[ -r /etc/rc.d/${_svc} ]] && ! grep -qw "^rc_cmd" /etc/rc.d/${_svc}
        _ret=$?
 
        set -A cached_svc_is_meta_${_svc} -- ${_ret}
@@ -182,14 +182,14 @@ svc_is_meta()
 svc_is_special()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        local _cached _ret
 
-       _cached=$(eval echo \${cached_svc_is_special_${_svc}})
-       [ "${_cached}" ] && return "${_cached}"
+       _cached=$(eval print \${cached_svc_is_special_${_svc}})
+       [[ -n ${_cached} ]] && return "${_cached}"
 
-       echo ${_special_svcs} | grep -qw -- ${_svc}
+       print ${_special_svcs} | grep -qw -- ${_svc}
        _ret=$?
 
        set -A cached_svc_is_special_${_svc} -- ${_ret}
@@ -199,7 +199,7 @@ svc_is_special()
 svc_ls()
 {
        local _lsarg=$1
-       [ -n "${_lsarg}" ] || return
+       [[ -n ${_lsarg} ]] || return
 
        # we do not want to return the "status" nor the rc.d(8) script retcode
        local _ret=0 _on _svc _started
@@ -208,31 +208,31 @@ svc_ls()
                all)
                        (
                                ls_rcscripts
-                               echo ${_special_svcs} | tr "[:blank:]" "\n"
+                               print ${_special_svcs} | tr "[:blank:]" "\n"
                        ) | sort
                        ;;
                failed)
                        for _svc in $(svc_ls on); do
                                ! svc_is_special ${_svc} && \
                                        ! /etc/rc.d/${_svc} check >/dev/null && 
\
-                                       echo ${_svc} && _ret=1
+                                       print ${_svc} && _ret=1
                        done
                        ;;
                off|on)
                        for _svc in $(svc_ls all); do
                                svc_get ${_svc} status && _on=1
-                                       [ "${_lsarg}" = "on" -a -n "${_on}" ] 
|| \
-                                               [ "${_lsarg}" = "off" -a -z 
"${_on}" ] && \
-                                       echo ${_svc}
+                                       [[ ${_lsarg} = on && -n ${_on} ]] || \
+                                               [[ ${_lsarg} = off && -z ${_on} 
]] && \
+                                       print ${_svc}
                                unset _on
                        done
                        ;;
                started|stopped)
                        for _svc in $(ls_rcscripts); do
                                /etc/rc.d/${_svc} check >/dev/null && _started=1
-                               [ "${_lsarg}" = "started" -a -n "${_started}" ] 
|| \
-                                       [ "${_lsarg}" = "stopped" -a -z 
"${_started}" ] && \
-                                       echo ${_svc}
+                               [[ ${_lsarg} = started && -n ${_started} ]] || \
+                                       [[ ${_lsarg} = stopped && -z 
${_started} ]] && \
+                                       print ${_svc}
                                unset _started
                        done
                        ;;
@@ -246,72 +246,72 @@ svc_ls()
 svc_get()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        local _status=0 _val _var=$2
        local daemon_class daemon_flags daemon_rtable daemon_timeout daemon_user
 
        if svc_is_special ${_svc}; then
-               daemon_flags="$(eval echo \${${_svc}})"
+               daemon_flags="$(eval print \${${_svc}})"
        else
                # set pkg daemon_flags to "NO" to match base svc
                if ! svc_is_base ${_svc}; then
-                       if ! echo ${pkg_scripts} | grep -qw -- ${_svc}; then
+                       if ! print ${pkg_scripts} | grep -qw -- ${_svc}; then
                                daemon_flags="NO"
                        fi
                fi
 
                if ! svc_is_meta ${_svc}; then
                        # these are expensive, make sure they are explicitely 
requested
-                       if [ -z "${_var}" -o "${_var}" = "class" ]; then
+                       if [[ -z ${_var} || ${_var} = class ]]; then
                                getcap -f /etc/login.conf ${_svc} 1>/dev/null 
2>&1 && \
                                        daemon_class=${_svc}
-                               [ -z "${daemon_class}" ] && \
+                               [[ -z ${daemon_class} ]] && \
                                        daemon_class="$(svc_getdef ${_svc} 
class)"
                        fi
                        if [[ -z ${_var} || ${_var} == @(flags|status) ]]; then
-                               [ -z "${daemon_flags}" ] && \
-                                       daemon_flags="$(eval echo 
\"\${${_svc}_flags}\")"
-                               [ -z "${daemon_flags}" ] && \
+                               [[ -z ${daemon_flags} ]] && \
+                                       daemon_flags="$(eval print 
\"\${${_svc}_flags}\")"
+                               [[ -z ${daemon_flags} ]] && \
                                        daemon_flags="$(svc_getdef ${_svc} 
flags)"
                        fi
-                       if [ -z "${_var}" -o "${_var}" = "rtable" ]; then
-                               [ -z "${daemon_rtable}" ] && \
-                                       daemon_rtable="$(eval echo 
\"\${${_svc}_rtable}\")"
-                               [ -z "${daemon_rtable}" ] && \
+                       if [[ -z ${_var} || ${_var} = rtable ]]; then
+                               [[ -z ${daemon_rtable} ]] && \
+                                       daemon_rtable="$(eval print 
\"\${${_svc}_rtable}\")"
+                               [[ -z ${daemon_rtable} ]] && \
                                        daemon_rtable="$(svc_getdef ${_svc} 
rtable)"
                        fi
-                       if [ -z "${_var}" -o "${_var}" = "timeout" ]; then
-                               [ -z "${daemon_timeout}" ] && \
-                                       daemon_timeout="$(eval echo 
\"\${${_svc}_timeout}\")"
-                               [ -z "${daemon_timeout}" ] && \
+                       if [[ -z ${_var} || ${_var} = timeout ]]; then
+                               [[ -z ${daemon_timeout} ]] && \
+                                       daemon_timeout="$(eval print 
\"\${${_svc}_timeout}\")"
+                               [[ -z ${daemon_timeout} ]] && \
                                        daemon_timeout="$(svc_getdef ${_svc} 
timeout)"
                        fi
-                       if [ -z "${_var}" -o "${_var}" = "user" ]; then
-                               [ -z "${daemon_user}" ] && \
-                                       daemon_user="$(eval echo 
\"\${${_svc}_user}\")"
-                               [ -z "${daemon_user}" ] && \
+                       if [[ -z ${_var} || ${_var} = user ]]; then
+                               [[ -z ${daemon_user} ]] && \
+                                       daemon_user="$(eval print 
\"\${${_svc}_user}\")"
+                               [[ -z ${daemon_user} ]] && \
                                        daemon_user="$(svc_getdef ${_svc} user)"
                        fi
                fi
        fi
 
-       [ "${daemon_flags}" = "NO" ] && _status=1
+       [[ ${daemon_flags} = NO ]] && _status=1
 
-       if [ -n "${_var}" ]; then
-               [ "${_var}" = "status" ] && return ${_status}
+       if [[ -n ${_var} ]]; then
+               [[ ${_var} = status ]] && return ${_status}
                eval _val=\${daemon_${_var}}
-               [ -z "${_val}" ] || print -r -- "${_val}"
+               [[ -z ${_val} ]] || print -r -- "${_val}"
        else
                svc_is_meta ${_svc} && return ${_status}
                if svc_is_special ${_svc}; then
-                       echo "${_svc}=${daemon_flags}"
+                       print "${_svc}=${daemon_flags}"
                else
-                       echo "${_svc}_class=${daemon_class}"
-                       echo "${_svc}_flags=${daemon_flags}"
-                       echo "${_svc}_rtable=${daemon_rtable}"
-                       echo "${_svc}_timeout=${daemon_timeout}"
-                       echo "${_svc}_user=${daemon_user}"
+                       print "${_svc}_class=${daemon_class}"
+                       print "${_svc}_flags=${daemon_flags}"
+                       print "${_svc}_rtable=${daemon_rtable}"
+                       print "${_svc}_timeout=${daemon_timeout}"
+                       print "${_svc}_user=${daemon_user}"
                fi
                return ${_status}
        fi
@@ -321,7 +321,7 @@ svc_get()
 svc_getdef()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        local _status=0 _val _var=$2
        local daemon_class daemon_flags daemon_rtable daemon_timeout daemon_user
@@ -329,8 +329,8 @@ svc_getdef()
        if svc_is_special ${_svc}; then
                # unconditionally parse: we always output flags and/or status
                _rc_parse_conf /etc/rc.conf
-               daemon_flags="$(eval echo \${${_svc}})"
-               [ "${daemon_flags}" = "NO" ] && _status=1
+               daemon_flags="$(eval print \${${_svc}})"
+               [[ ${daemon_flags} = NO ]] && _status=1
        else
                if ! svc_is_base ${_svc}; then
                        _status=1 # all pkg_scripts are off by default
@@ -340,7 +340,8 @@ svc_getdef()
                        # we'll get our default flags from the rc.d script
                        [[ -z ${_var} || ${_var} == status ]] && \
                                _rc_parse_conf /etc/rc.conf
-                       [ "$(eval echo \${${_svc}_flags})" = "NO" ] && _status=1
+                       [[ "$(eval print \${${_svc}_flags})" = NO ]] && \
+                               _status=1
                fi
 
                if ! svc_is_meta ${_svc}; then
@@ -348,26 +349,26 @@ svc_getdef()
                        . /etc/rc.d/${_svc} >/dev/null 2>&1
 
                        daemon_class=daemon
-                       [ -z "${daemon_rtable}" ] && daemon_rtable=0
-                       [ -z "${daemon_timeout}" ] && daemon_timeout=30
-                       [ -z "${daemon_user}" ] && daemon_user=root
+                       [[ -z ${daemon_rtable} ]] && daemon_rtable=0
+                       [[ -z ${daemon_timeout} ]] && daemon_timeout=30
+                       [[ -z ${daemon_user} ]] && daemon_user=root
                fi
        fi
 
-       if [ -n "${_var}" ]; then
-               [ "${_var}" = "status" ] && return ${_status}
+       if [[ -n ${_var} ]]; then
+               [[ ${_var} = status ]] && return ${_status}
                eval _val=\${daemon_${_var}}
-               [ -z "${_val}" ] || print -r -- "${_val}"
+               [[ -z ${_val} ]] || print -r -- "${_val}"
        else
                svc_is_meta ${_svc} && return ${_status}
                if svc_is_special ${_svc}; then
-                       echo "${_svc}=${daemon_flags}"
+                       print "${_svc}=${daemon_flags}"
                else
-                       echo "${_svc}_class=${daemon_class}"
-                       echo "${_svc}_flags=${daemon_flags}"
-                       echo "${_svc}_rtable=${daemon_rtable}"
-                       echo "${_svc}_timeout=${daemon_timeout}"
-                       echo "${_svc}_user=${daemon_user}"
+                       print "${_svc}_class=${daemon_class}"
+                       print "${_svc}_flags=${daemon_flags}"
+                       print "${_svc}_rtable=${daemon_rtable}"
+                       print "${_svc}_timeout=${daemon_timeout}"
+                       print "${_svc}_user=${daemon_user}"
                fi
                return ${_status}
        fi
@@ -376,18 +377,18 @@ svc_getdef()
 svc_rm()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ -n ${_svc} ]] || return
 
        rcconf_edit_begin
        if svc_is_special ${_svc}; then
                grep -v "^${_svc}.*=" /etc/rc.conf.local >${_TMP_RCCONF}
                ( svc_getdef ${_svc} status ) && \
-                       echo "${_svc}=NO" >>${_TMP_RCCONF}
+                       print "${_svc}=NO" >>${_TMP_RCCONF}
        else
                grep -Ev "^${_svc}_(flags|rtable|timeout|user).*=" \
                        /etc/rc.conf.local >${_TMP_RCCONF}
                ( svc_getdef ${_svc} status ) && \
-                       echo "${_svc}_flags=NO" >>${_TMP_RCCONF}
+                       print "${_svc}_flags=NO" >>${_TMP_RCCONF}
        fi
        rcconf_edit_end
 }
@@ -395,7 +396,7 @@ svc_rm()
 svc_set()
 {
        local _svc=$1 _var=$2
-       [ -n "${_svc}" -a -n "${_var}" ] || return
+       [[ -n ${_svc} && -n ${_var} ]] || return
 
        shift 2
        local _args="$*"
@@ -403,16 +404,16 @@ svc_set()
        # don't check if we are already enabled or disabled because rc.conf(8)
        # defaults may have changed in which case we may have a matching
        # redundant entry in rc.conf.local that we can drop
-       if [ "${_var}" = "status" ]; then
-               if [ "${_args}" = "on" ]; then
+       if [[ ${_var} = status ]]; then
+               if [[ ${_args} = on ]]; then
                        _var="flags"
                        # keep our flags if we're already enabled
                        eval "_args=\"\${${_svc}_${_var}}\""
-                       [ "${_args}" = "NO" ] && unset _args
+                       [[ ${_args} = NO ]] && unset _args
                        if ! svc_is_base ${_svc} && ! svc_is_special ${_svc}; 
then
                                pkg_scripts_append ${_svc}
                        fi
-               elif [ "${_args}" = "off" ]; then
+               elif [[ ${_args} = off ]]; then
                        if ! svc_is_base ${_svc} && ! svc_is_special ${_svc}; 
then
                                pkg_scripts_rm ${_svc}
                        fi
@@ -427,44 +428,44 @@ svc_set()
        fi
 
        if svc_is_special ${_svc}; then
-               [ "${_var}" = "flags" ] || return
+               [[ ${_var} = flags ]] || return
                rcconf_edit_begin
                grep -v "^${_svc}.*=" /etc/rc.conf.local >${_TMP_RCCONF}
                ( svc_getdef ${_svc} status ) || \
-                       echo "${_svc}=YES" >>${_TMP_RCCONF}
+                       print "${_svc}=YES" >>${_TMP_RCCONF}
                rcconf_edit_end
                return
        fi
 
-       if [ -n "${_args}" ]; then
-               if [ "${_var}" = "rtable" ]; then
+       if [[ -n ${_args} ]]; then
+               if [[ ${_var} = rtable ]]; then
                        [[ ${_args} != +([[:digit:]]) || ${_args} -lt 0 ]] && \
                                rcctl_err "\"${_args}\" is not an integer"
                fi
-               if [ "${_var}" = "timeout" ]; then
+               if [[ ${_var} = timeout ]]; then
                        [[ ${_args} != +([[:digit:]]) || ${_args} -le 0 ]] && \
                                rcctl_err "\"${_args}\" is not a positive 
integer"
                fi
-               if [ "${_var}" = "user" ]; then
+               if [[ ${_var} = user ]]; then
                        getent passwd "${_args}" >/dev/null || \
                                rcctl_err "user \"${_args}\" does not exist"
                fi
                # unset flags if they match the default enabled ones
-               [ "${_args}" = "$(svc_getdef ${_svc} ${_var})" ] && \
+               [[ ${_args} = "$(svc_getdef ${_svc} ${_var})" ]] && \
                        unset _args
        fi
 
        # protect leading whitespace
-       [ "${_args}" = "${_args# }" ] || _args="\"${_args}\""
+       [[ ${_args} = "${_args# }" ]] || _args="\"${_args}\""
 
        # reset: value may have changed
        unset ${_svc}_${_var}
 
        rcconf_edit_begin
        grep -v "^${_svc}_${_var}.*=" /etc/rc.conf.local >${_TMP_RCCONF}
-       if [ -n "${_args}" ] || \
-          ( svc_is_base ${_svc} && ! svc_getdef ${_svc} status && [ "${_var}" 
== "flags" ] ); then
-               echo "${_svc}_${_var}=${_args}" >>${_TMP_RCCONF}
+       if [[ -n ${_args} ]] || \
+          ( svc_is_base ${_svc} && ! svc_getdef ${_svc} status && [[ ${_var} 
== flags ]] ); then
+               print "${_svc}_${_var}=${_args}" >>${_TMP_RCCONF}
        fi
        rcconf_edit_end
 }
@@ -478,7 +479,7 @@ while getopts "df" c; do
        esac
 done
 shift $((OPTIND-1))
-[ $# -gt 0 ] || usage
+[[ $# > 0 ]] || usage
 
 action=$1
 ret=0
@@ -499,9 +500,9 @@ case ${action} in
        disable|enable|start|stop|restart|reload|check)
                shift 1
                svcs="$*"
-               [ -z "${svcs}" ] && usage
+               [[ -z ${svcs} ]] && usage
                # it's ok to disable a non-existing daemon
-               if [ "${action}" != "disable" ]; then
+               if [[ ${action} != disable ]]; then
                        for svc in ${svcs}; do
                                svc_is_avail ${svc} || \
                                        rcctl_err "service ${svc} does not 
exist" 2
@@ -511,14 +512,14 @@ case ${action} in
        get|getdef)
                svc=$2
                var=$3
-               [ -z "${svc}" ] && usage
-               [ "${svc}" = "all" ] || svc_is_avail ${svc} || \
+               [[ -z ${svc} ]] && usage
+               [[ ${svc} = all ]] || svc_is_avail ${svc} || \
                        rcctl_err "service ${svc} does not exist" 2
-               if [ -n "${var}" ]; then
-                       [ "${svc}" = "all" ] && usage
+               if [[ -n ${var} ]]; then
+                       [[ ${svc} = all ]] && usage
                        [[ ${var} != @(class|flags|status|rtable|timeout|user) 
]] && usage
                        if svc_is_meta ${svc}; then
-                               [ "${var}" != "status" ] && \
+                               [[ ${var} != status ]] && \
                                        rcctl_err "/etc/rc.d/${svc} is a meta 
script, cannot \"${action} ${var}\""
                        fi
                        if svc_is_special ${svc}; then
@@ -530,16 +531,16 @@ case ${action} in
        set)
                svc=$2
                var=$3
-               [ $# -ge 3 ] && shift 3 || shift $#
+               [[ $# > 3 ]] && shift 3 || shift $#
                args="$*"
-               [ -z "${svc}" ] && usage
+               [[ -z ${svc} ]] && usage
                # it's ok to disable a non-existing daemon
-               if [ "${action} ${var} ${args}" != "set status off" ]; then
+               if [[ "${action} ${var} ${args}" != "set status off" ]]; then
                        svc_is_avail ${svc} || \
                                rcctl_err "service ${svc} does not exist" 2
                fi
                [[ ${var} != @(class|flags|rtable|status|timeout|user) ]] && 
usage
-               svc_is_meta ${svc} && [ "${var}" != "status" ] && \
+               svc_is_meta ${svc} && [[ ${var} != status ]] && \
                        rcctl_err "/etc/rc.d/${svc} is a meta script, cannot 
\"${action} ${var}\""
                [[ ${var} = flags && ${args} = NO ]] && \
                        rcctl_err "\"flags NO\" contradicts \"${action}\""
@@ -571,7 +572,7 @@ case ${action} in
                exit ${ret}
                ;;
        get|getdef)
-               if [ "${svc}" = "all" ]; then
+               if [[ ${svc} = all ]]; then
                        for svc in $(svc_ls all); do
                                ( svc_${action} ${svc} "${var}" )
                        done
@@ -586,11 +587,11 @@ case ${action} in
                svc_ls ${lsarg}
                ;;
        order)
-               if [ -n "${svcs}" ]; then
+               if [[ -n ${svcs} ]]; then
                        needs_root ${action}
                        pkg_scripts_order ${svcs}
                else
-                       [[ -z ${pkg_scripts} ]] || echo ${pkg_scripts}
+                       [[ -z ${pkg_scripts} ]] || print ${pkg_scripts}
                fi
                ;;
        set)

Reply via email to