diff options
author | dteske <dteske@FreeBSD.org> | 2014-07-31 22:00:36 +0000 |
---|---|---|
committer | dteske <dteske@FreeBSD.org> | 2014-07-31 22:00:36 +0000 |
commit | 5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1 (patch) | |
tree | 8e8ea70ac0e4c0cc134a4963b0a86ddceaa998e3 /usr.sbin/bsdconfig | |
parent | b8112840fb7f996ebf4cb69002bbd4bc5d4d901b (diff) | |
download | FreeBSD-src-5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1.zip FreeBSD-src-5b30ac864c3160ef60e71ce9d69e8ce8ebe5c2a1.tar.gz |
Define a setvar() function for platforms using a shell unlike FreeBSD's
sh(1) for `/bin/sh' (e.g., bash(1) which lacks a setvar definition).
This is to improve portability to other Operating Systems (e.g., Linux).
Diffstat (limited to 'usr.sbin/bsdconfig')
-rw-r--r-- | usr.sbin/bsdconfig/share/common.subr | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/usr.sbin/bsdconfig/share/common.subr b/usr.sbin/bsdconfig/share/common.subr index 8fb9adaa..6ce1956 100644 --- a/usr.sbin/bsdconfig/share/common.subr +++ b/usr.sbin/bsdconfig/share/common.subr @@ -220,6 +220,32 @@ f_have() f_quietly type "$@" } +# setvar $var_to_set [$value] +# +# Implement setvar for shells such as unlike FreeBSD sh(1). +# +if ! f_have setvar; then +setvar() +{ + [ $# -gt 0 ] || return $SUCCESS + local __setvar_var_to_set="$1" __setvar_right="$2" __setvar_left= + case $# in + 1) unset "$__setvar_var_to_set" + return $? ;; + 2) : fall through ;; + *) f_err "setvar: too many arguments\n" + return $FAILURE + esac + while case "$__setvar_r" in *\'*) : ;; *) false ; esac + do + __setvar_left="$__setvar_left${__setvar_right%%\'*}'\\''" + __setvar_right="${__setvar_right#*\'}" + done + __setvar_left="$__setvar_left${__setvar_right#*\'}" + eval "$__setvar_var_to_set='$__setvar_left'" +} +fi + # f_which $anything [$var_to_set] # # A fast built-in replacement for syntaxes such as foo=$( which bar ). In a |