Dave Reisner, 2011-07-12 12:19:
On Tue, Jul 12, 2011 at 10:58:36AM +0200, Kurt J. Bosch wrote:
The rules should be:
* Use quotes when literal strings are involved.
* Use quotes when ever using a substitution which might produce blanks
as a possitional parameter unless word splitting is intended.
* Don't use quotes for substitutions where _clearly_ not needed.
That is within '[[ ]]', assignments and 'case ... in' (where no word
splitting is performed) and also when using local variables which
_obviously_ don't contain blanks.
The RHS of a bash test is subject to glob matching and should almost
always be quoted.
$ pattern=foo*
$ [[ foobar = $pattern ]]; echo $?
0
$ [[ foobar = "$pattern" ]]; echo $?
1
So this isn't really black and white. Fortunately, this doesn't appear
to be an issue.
Good catch. Fixed this in the new thread together with those below to
avoid this will ever be forgotten.
Other comments inlined.
---
functions | 50 +++++++++++++++++++++++++-------------------------
rc.sysinit | 22 +++++++++++-----------
2 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/functions b/functions
index 722098d..bdb8529 100644
--- a/functions
+++ b/functions
@@ -20,9 +20,9 @@ calc_columns () {
USECOLOR=""
elif [[ -t 0 ]]; then
# stty will fail when stdin isn't a terminal
- STAT_COL="$(stty size)"
+ STAT_COL=$(stty size)
# stty gives "rows cols"; strip the rows number, we just want
columns
- STAT_COL="${STAT_COL##* }"
+ STAT_COL=${STAT_COL##* }
elif tput cols&>/dev/null; then
# is /usr/share/terminfo already mounted, and TERM recognized?
STAT_COL=$(tput cols)
@@ -50,7 +50,7 @@ calc_columns () {
calc_columns
# disable colors on broken terminals
-TERM_COLORS="$(tput colors 2>/dev/null)"
+TERM_COLORS=$(tput colors 2>/dev/null)
if (( $? != 3 )); then
case $TERM_COLORS in
*[!0-9]*) USECOLOR="";;
@@ -76,16 +76,16 @@ fi
# set colors
if [[ $USECOLOR = [yY][eE][sS] ]]; then
if tput setaf 0&>/dev/null; then
- C_CLEAR="$(tput sgr0)" # clear text
- C_MAIN="${C_CLEAR}$(tput bold)" # main text
- C_OTHER="${C_MAIN}$(tput setaf 4)" # prefix& brackets
- C_SEPARATOR="${C_MAIN}$(tput setaf 0)" # separator
- C_BUSY="${C_CLEAR}$(tput setaf 6)" # busy
- C_FAIL="${C_MAIN}$(tput setaf 1)" # failed
- C_DONE="${C_MAIN}" # completed
- C_BKGD="${C_MAIN}$(tput setaf 5)" # backgrounded
- C_H1="${C_MAIN}" # highlight text 1
- C_H2="${C_MAIN}$(tput setaf 6)" # highlight text 2
+ C_CLEAR=$(tput sgr0) # clear text
+ C_MAIN=${C_CLEAR}$(tput bold) # main text
+ C_OTHER=${C_MAIN}$(tput setaf 4) # prefix& brackets
+ C_SEPARATOR=${C_MAIN}$(tput setaf 0) # separator
+ C_BUSY=${C_CLEAR}$(tput setaf 6) # busy
+ C_FAIL=${C_MAIN}$(tput setaf 1) # failed
+ C_DONE=${C_MAIN} # completed
+ C_BKGD=${C_MAIN}$(tput setaf 5) # backgrounded
+ C_H1=${C_MAIN} # highlight text 1
+ C_H2=${C_MAIN}$(tput setaf 6) # highlight text 2
else
C_CLEAR="\e[m" # clear text
C_MAIN="\e[;1m" # main text
@@ -93,9 +93,9 @@ if [[ $USECOLOR = [yY][eE][sS] ]]; then
C_SEPARATOR="\e[1;30m" # separator
C_BUSY="\e[;36m" # busy
C_FAIL="\e[1;31m" # failed
- C_DONE="${C_MAIN}" # completed
+ C_DONE=${C_MAIN} # completed
C_BKGD="\e[1;35m" # backgrounded
- C_H1="${C_MAIN}" # highlight text 1
+ C_H1=${C_MAIN} # highlight text 1
C_H2="\e[1;36m" # highlight text 2
fi
fi
@@ -198,7 +198,7 @@ have_daemon() {
ck_autostart() {
local d
for d in "${DAEMONS[@]}"; do
- [[ "$1" = ${d#@} ]]&& return 1
+ [[ $1 = ${d#@} ]]&& return 1
done
return 0
}
@@ -247,11 +247,11 @@ get_pid() {
# Check if PID-file $1 is still the active PID-file for command $2
ck_pidfile() {
- if [[ -f "$1" ]]; then
+ if [[ -f $1 ]]; then
local fpid ppid
read -r fpid<"$1"
- ppid=$(get_pid $2)
- [[ "$fpid" = "$ppid" ]]&& return 0
+ ppid=$(get_pid "$2")
+ [[ $fpid = $ppid ]]&& return 0
fi
return 1
}
@@ -279,7 +279,7 @@ stop_all_daemons() {
local i
for (( i=${#DAEMONS[@]}-1; i>=0; i-- )); do
[[ ${DAEMONS[i]} = '!'* ]]&& continue
- ck_daemon ${DAEMONS[i]#@} || stop_daemon ${DAEMONS[i]#@}
+ ck_daemon "${DAEMONS[i]#@}" || stop_daemon "${DAEMONS[i]#@}"
done
}
@@ -325,7 +325,7 @@ udevd_modprobe() {
status "Loading Modules" modprobe -ab "${MODULES[@]}"
status "Waiting for UDev uevents to be processed" \
- udevadm settle --timeout=${UDEV_TIMEOUT:-30}
+ udevadm settle --timeout="${UDEV_TIMEOUT:-30}"
Why does this warrant quoting? passing --timeout= is harmless. If a user
sets anything but a number here it's a syntax error, and udevadm will,
furthermore, ignore the argument that it doesn't understand when
multiple words are assigned.
OK. You convinced me.
run_hook "$1_udevsettled"
@@ -374,7 +374,7 @@
NETFS="nfs,nfs4,smbfs,cifs,codafs,ncpfs,shfs,fuse,fuseblk,glusterfs,davfs,fuse.g
# Check local filesystems
fsck_all() {
- fsck -A -T -C$FSCK_FD -a -t "no${NETFS//,/,no},noopts=_netdev"
$FORCEFSCK
+ fsck -A -T -C"$FSCK_FD" -a -t "no${NETFS//,/,no},noopts=_netdev"
$FORCEFSCK
return $?
}
@@ -486,7 +486,7 @@ if (( RC_FUNCTIONS_HOOK_FUNCS_DEFINED != 1 )); then
add_hook() {
[[ $1&& $2 ]] || return 1
- hook_funcs["$1"]+=" $2"
+ hook_funcs[$1]+=" $2"
}
run_hook() {
@@ -509,8 +509,8 @@ set_consolefont() {
[[ ${LOCALE,,} =~ utf ]]&& CONSOLEMAP=""
local i
for i in /dev/tty[0-9]*; do
- setfont ${CONSOLEMAP:+-m ${CONSOLEMAP}} \
- $CONSOLEFONT -C ${i}&>/dev/null
+ setfont ${CONSOLEMAP:+-m "${CONSOLEMAP}"} \
+ "$CONSOLEFONT" -C ${i}&>/dev/null
done
if (( $? )); then
false
diff --git a/rc.sysinit b/rc.sysinit
index 1516fba..839a787 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -96,14 +96,14 @@ if [[ -f /etc/crypttab&& $CS ]]&& grep -q ^[^#]
/etc/crypttab; then
# $3 = password
# $4 = options
stat_append "${1}.."
- local open=create a="$1" b="$2" failed=0
+ local open=create a=$1 b=$2 failed=0
# Ordering of options is different if you are using
LUKS vs. not.
# Use ugly swizzling to deal with it.
# isLuks only gives an exit code but no output to
stdout or stderr.
if $CS isLuks "$2" 2>/dev/null; then
open=luksOpen
- a="$2"
- b="$1"
+ a=$2
+ b=$1
fi
case $3 in
SWAP)
@@ -123,13 +123,13 @@ if [[ -f /etc/crypttab&& $CS ]]&& grep -q ^[^#]
/etc/crypttab; then
fi
if (( _overwriteokay == 0 )); then
false
- elif $CS -d /dev/urandom $4 $open "$a"
"$b">/dev/null; then
+ elif $CS -d /dev/urandom "$4" $open "$a"
"$b">/dev/null; then
stat_append "creating
swapspace.."
- mkswap -f -L $1
/dev/mapper/$1>/dev/null
+ mkswap -f -L $1
/dev/mapper/"$1">/dev/null
fi;;
ASK)
printf "\nOpening '$1' volume:\n"
- $CS $4 $open "$a" "$b"< /dev/console;;
+ $CS "$4" $open "$a" "$b"<
/dev/console;;
/dev*)
local ckdev=${3%%:*}
local cka=${3#*:}
@@ -151,13 +151,13 @@ if [[ -f /etc/crypttab&& $CS ]]&& grep -q ^[^#]
/etc/crypttab; then
# cka is numeric:
cka=offset, ckb=length
dd if=${ckdev} of=${ckfile} bs=1
skip=${cka} count=${ckb}>/dev/null 2>&1;;
esac
- $CS -d ${ckfile} $4 $open "$a"
"$b">/dev/null
+ $CS -d ${ckfile} "$4" $open "$a"
"$b">/dev/null
dd if=/dev/urandom of=${ckfile} bs=1 count=$(stat
-c %s ${ckfile}) conv=notrunc>/dev/null 2>&1
rm ${ckfile};;
/*)
- $CS -d "$3" $4 $open "$a"
"$b">/dev/null;;
+ $CS -d "$3" "$4" $open "$a"
"$b">/dev/null;;
*)
- echo "$3" | $CS $4 $open "$a"
"$b">/dev/null;;
+ echo "$3" | $CS "$4" $open "$a"
"$b">/dev/null;;
esac
if (( $? )); then
failed=1
@@ -179,7 +179,7 @@ declare -r FORCEFSCK
run_hook sysinit_prefsck
if [[ -x $(type -P fsck) ]]; then
stat_busy "Checking Filesystems"
- fsck_all>|${FSCK_OUT:-/dev/stdout} 2>|${FSCK_ERR:-/dev/stdout}
+ fsck_all>|"${FSCK_OUT:-/dev/stdout}"
2>|"${FSCK_ERR:-/dev/stdout}"
declare -r fsckret=$?
(( fsckret<= 1 ))&& stat_done || stat_fail
else
@@ -261,7 +261,7 @@ else
stat_done
fi
[[ $KEYMAP ]]&&
- status "Loading Keyboard Map: $KEYMAP" loadkeys -q $KEYMAP
+ status "Loading Keyboard Map: $KEYMAP" loadkeys -q "$KEYMAP"
KEYMAP might be multiple words, intentionally, to load multiple keymaps.
We cannot quote this.
https://bugs.archlinux.org/task/23373
Oops, thank you for clarifying this.
# Set console font if required
set_consolefont
--
1.7.1
--
Kurt