linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
@ 2024-05-31 13:45 Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 1/8] tools: tests: don't mix string and array Kent Gibson
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Following up on recent discussions, this series fixes all the warnings
detected by shellcheck.  The resulting tools test script is now clean,
at least from the perspective of shellcheck.

These fixes do not correct any known issue, other than shellcheck
reporting them as potential problems, the intent is to remove common
shell issues that may impact future changes, and to simplify checking
that any subsequent changes to the test script constitute "good" shell.

All the patches other than Patch 8 address a particular warning.
They are reasonably self-explanatory, but each commit comment includes a
link to the relevant warning(s) which describes the issue and the
appropriate corrections.

Patch 8 addresses a number of warnings, all related to word splitting
and globbing, and those constitute the bulk of the changes.
Some of the earlier patches also address trivial splitting/globbing
issues where that would prevent a line being modified multiple times.

Cheers,
Kent.

Kent Gibson (8):
  tools: tests: don't mix string and array
  tools: tests: don't declare and assign separately
  tools: tests: fix unused variables
  tools: tests: use read -r to avoid mangling backslashes
  tools: tests: don't use variables in printf format string
  tools: tests: check exit code directly
  tools: tests: shellcheck don't follow sourced file
  tools: tests: avoid splitting and globbing

 tools/gpio-tools-test.bash | 459 +++++++++++++++++++------------------
 1 file changed, 234 insertions(+), 225 deletions(-)

--
2.39.2


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 1/8] tools: tests: don't mix string and array
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately Kent Gibson
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2145[1] - argument mixes string and array.

Separate the command from the array of arguments to avoid mixing.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2145
---
 tools/gpio-tools-test.bash | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index 521556c..34ea744 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -174,18 +174,24 @@ gpiosim_cleanup() {
 run_tool() {
 	# Executables to test are expected to be in the same directory as the
 	# testing script.
-	output=$(timeout 10s $SOURCE_DIR/"$@" 2>&1)
+	cmd=$1
+	shift
+	output=$(timeout 10s "$SOURCE_DIR/$cmd" "$@" 2>&1)
 	status=$?
 }
 
 dut_run() {
-	coproc timeout 10s $SOURCE_DIR/"$@" 2>&1
+	cmd=$1
+	shift
+	coproc timeout 10s "$SOURCE_DIR/$cmd" "$@" 2>&1
 	DUT_PID=$COPROC_PID
 	read -t1 -n1 -u ${COPROC[0]} DUT_FIRST_CHAR
 }
 
 dut_run_redirect() {
-	coproc timeout 10s $SOURCE_DIR/"$@" > $SHUNIT_TMPDIR/$DUT_OUTPUT 2>&1
+	cmd=$1
+	shift
+	coproc timeout 10s "$SOURCE_DIR/$cmd" "$@" > "$SHUNIT_TMPDIR/$DUT_OUTPUT" 2>&1
 	DUT_PID=$COPROC_PID
 	# give the process time to spin up
 	# FIXME - find a better solution
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 1/8] tools: tests: don't mix string and array Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-06-03  8:52   ` Bartosz Golaszewski
  2024-05-31 13:45 ` [libgpiod][PATCH 3/8] tools: tests: fix unused variables Kent Gibson
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2155[1] - declare and assign separately to avoid
masking return values.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2155
---
 tools/gpio-tools-test.bash | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index 34ea744..6bbb06c 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -49,7 +49,8 @@ output_is() {
 
 num_lines_is() {
 	[ "$1" -eq "0" ] || [ -z "$output" ] && return 0
-	local NUM_LINES=$(echo "$output" | wc -l)
+	local NUM_LINES
+	NUM_LINES=$(echo "$output" | wc -l)
 	assertEquals " number of lines:" "$1" "$NUM_LINES"
 }
 
@@ -73,16 +74,18 @@ gpiosim_chip() {
 
 	for ARG in "$@"
 	do
-		local KEY=$(echo $ARG | cut -d"=" -f1)
-		local VAL=$(echo $ARG | cut -d"=" -f2)
+		local KEY VAL
+		KEY=$(echo "$ARG" | cut -d"=" -f1)
+		VAL=$(echo "$ARG" | cut -d"=" -f2)
 
 		if [ "$KEY" = "num_lines" ]
 		then
 			echo $VAL > $BANKPATH/num_lines
 		elif [ "$KEY" = "line_name" ]
 		then
-			local OFFSET=$(echo $VAL | cut -d":" -f1)
-			local LINENAME=$(echo $VAL | cut -d":" -f2)
+			local OFFSET LINENAME
+			OFFSET=$(echo "$VAL" | cut -d":" -f1)
+			LINENAME=$(echo "$VAL" | cut -d":" -f2)
 			local LINEPATH=$BANKPATH/line$OFFSET
 
 			mkdir -p $LINEPATH
@@ -92,10 +95,11 @@ gpiosim_chip() {
 
 	echo 1 > $DEVPATH/live
 
-	local chip_name=$(<$BANKPATH/chip_name)
-	GPIOSIM_CHIP_NAME[$1]=$chip_name
-	GPIOSIM_CHIP_PATH[$1]="/dev/$chip_name"
-	GPIOSIM_DEV_NAME[$1]=$(<$DEVPATH/dev_name)
+	local CHIP_NAME
+	CHIP_NAME=$(<"$BANKPATH/chip_name")
+	GPIOSIM_CHIP_NAME[$1]=$CHIP_NAME
+	GPIOSIM_CHIP_PATH[$1]="/dev/$CHIP_NAME"
+	GPIOSIM_DEV_NAME[$1]=$(<"$DEVPATH/dev_name")
 }
 
 gpiosim_chip_number() {
@@ -3044,14 +3048,16 @@ die() {
 # Must be done after we sources shunit2 as we need SHUNIT_VERSION to be set.
 oneTimeSetUp() {
 	test "$SHUNIT_VERSION" = "$MIN_SHUNIT_VERSION" && return 0
-	local FIRST=$(printf "$SHUNIT_VERSION\n$MIN_SHUNIT_VERSION\n" | sort -Vr | head -1)
+	local FIRST
+	FIRST=$(printf "$SHUNIT_VERSION\n$MIN_SHUNIT_VERSION\n" | sort -Vr | head -1)
 	test "$FIRST" = "$MIN_SHUNIT_VERSION" && \
 		die "minimum shunit version required is $MIN_SHUNIT_VERSION (current version is $SHUNIT_VERSION"
 }
 
 check_kernel() {
 	local REQUIRED=$1
-	local CURRENT=$(uname -r)
+	local CURRENT
+	CURRENT=$(uname -r)
 
 	SORTED=$(printf "$REQUIRED\n$CURRENT" | sort -V | head -n 1)
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 3/8] tools: tests: fix unused variables
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 1/8] tools: tests: don't mix string and array Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 4/8] tools: tests: use read -r to avoid mangling backslashes Kent Gibson
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellckeck SC2034[1] - foo appears unused.

Prefix intentionally unused variables with "_" and remove variables
not actually used.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2034
---
 tools/gpio-tools-test.bash | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index 6bbb06c..b065296 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -146,7 +146,7 @@ gpiosim_wait_value() {
 	local CHIPNAME=${GPIOSIM_CHIP_NAME[$1]}
 	local PORT=$GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/value
 
-	for i in {1..30}; do
+	for _i in {1..30}; do
 		[ "$(<$PORT)" = "$EXPECTED" ] && return
 		sleep 0.01
 	done
@@ -159,7 +159,6 @@ gpiosim_cleanup() {
 		local NAME=${GPIOSIM_APP_NAME}-$$-$CHIP
 
 		local DEVPATH=$GPIOSIM_CONFIGFS/$NAME
-		local BANKPATH=$DEVPATH/bank0
 
 		echo 0 > $DEVPATH/live
 		find "$DEVPATH" -type d -name hog -exec rmdir '{}' '+'
@@ -229,13 +228,13 @@ dut_readable() {
 }
 
 dut_flush() {
-	local JUNK
+	local _JUNK
 	lines=()
 	output=
 	unset DUT_FIRST_CHAR
-	while read -t 0 -u ${COPROC[0]} JUNK
+	while read -t 0 -u "${COPROC[0]}" _JUNK
 	do
-		read -t 0.1 -u ${COPROC[0]} JUNK || true
+		read -t 0.1 -u "${COPROC[0]}" _JUNK || true
 	done
 }
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 4/8] tools: tests: use read -r to avoid mangling backslashes
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (2 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 3/8] tools: tests: fix unused variables Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 5/8] tools: tests: don't use variables in printf format string Kent Gibson
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2162[1] - read without -r will mangle backslashes.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2162
---
 tools/gpio-tools-test.bash | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index b065296..efe558b 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -188,7 +188,7 @@ dut_run() {
 	shift
 	coproc timeout 10s "$SOURCE_DIR/$cmd" "$@" 2>&1
 	DUT_PID=$COPROC_PID
-	read -t1 -n1 -u ${COPROC[0]} DUT_FIRST_CHAR
+	read -r -t1 -n1 -u "${COPROC[0]}" DUT_FIRST_CHAR
 }
 
 dut_run_redirect() {
@@ -211,7 +211,7 @@ dut_read_redirect() {
 dut_read() {
 	local LINE
 	lines=()
-	while read -t 0.2 -u ${COPROC[0]} LINE
+	while read -r -t 0.2 -u "${COPROC[0]}" LINE
 	do
 		if [ -n "$DUT_FIRST_CHAR" ]
 		then
@@ -234,7 +234,7 @@ dut_flush() {
 	unset DUT_FIRST_CHAR
 	while read -t 0 -u "${COPROC[0]}" _JUNK
 	do
-		read -t 0.1 -u "${COPROC[0]}" _JUNK || true
+		read -r -t 0.1 -u "${COPROC[0]}" _JUNK || true
 	done
 }
 
@@ -242,7 +242,7 @@ dut_flush() {
 dut_regex_match() {
 	PATTERN=$1
 
-	read -t 0.2 -u ${COPROC[0]} LINE || (echo Timeout && false)
+	read -r -t 0.2 -u "${COPROC[0]}" LINE || (echo Timeout && false)
 	if [ -n "$DUT_FIRST_CHAR" ]
 	then
 		LINE=${DUT_FIRST_CHAR}${LINE}
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 5/8] tools: tests: don't use variables in printf format string
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (3 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 4/8] tools: tests: use read -r to avoid mangling backslashes Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 6/8] tools: tests: check exit code directly Kent Gibson
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2059[1] - don't use variables in the printf format
string.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2059
---
 tools/gpio-tools-test.bash | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index efe558b..d9930f1 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -3048,7 +3048,7 @@ die() {
 oneTimeSetUp() {
 	test "$SHUNIT_VERSION" = "$MIN_SHUNIT_VERSION" && return 0
 	local FIRST
-	FIRST=$(printf "$SHUNIT_VERSION\n$MIN_SHUNIT_VERSION\n" | sort -Vr | head -1)
+	FIRST=$(printf "%s\n%s\n" "$SHUNIT_VERSION" "$MIN_SHUNIT_VERSION" | sort -Vr | head -1)
 	test "$FIRST" = "$MIN_SHUNIT_VERSION" && \
 		die "minimum shunit version required is $MIN_SHUNIT_VERSION (current version is $SHUNIT_VERSION"
 }
@@ -3058,7 +3058,7 @@ check_kernel() {
 	local CURRENT
 	CURRENT=$(uname -r)
 
-	SORTED=$(printf "$REQUIRED\n$CURRENT" | sort -V | head -n 1)
+	SORTED=$(printf "%s\n%s" "$REQUIRED" "$CURRENT" | sort -V | head -n 1)
 
 	if [ "$SORTED" != "$REQUIRED" ]
 	then
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 6/8] tools: tests: check exit code directly
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (4 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 5/8] tools: tests: don't use variables in printf format string Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 7/8] tools: tests: shellcheck don't follow sourced file Kent Gibson
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2181[1] - check exit code directly.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC2181
---
 tools/gpio-tools-test.bash | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index d9930f1..83b05ec 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -3069,8 +3069,7 @@ check_kernel() {
 check_prog() {
 	local PROG=$1
 
-	which "$PROG" > /dev/null
-	if [ "$?" -ne "0" ]
+	if ! which "$PROG" > /dev/null
 	then
 		die "$PROG not found - needed to run the tests"
 	fi
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 7/8] tools: tests: shellcheck don't follow sourced file
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (5 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 6/8] tools: tests: check exit code directly Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-05-31 13:45 ` [libgpiod][PATCH 8/8] tools: tests: avoid splitting and globbing Kent Gibson
  2024-06-03 10:40 ` [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Bartosz Golaszewski
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC1091 - not following.

Use a directive to prevent shellcheck complaining about sourcing
shunit2, which we don't care to check.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1] https://www.shellcheck.net/wiki/SC1091
---
 tools/gpio-tools-test.bash | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index 83b05ec..4551dc2 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -3087,4 +3087,5 @@ modprobe gpio-sim || die "unable to load the gpio-sim module"
 mountpoint /sys/kernel/config/ > /dev/null 2> /dev/null || \
 	die "configfs not mounted at /sys/kernel/config/"
 
+# shellcheck source=/dev/null
 . shunit2
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [libgpiod][PATCH 8/8] tools: tests: avoid splitting and globbing
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (6 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 7/8] tools: tests: shellcheck don't follow sourced file Kent Gibson
@ 2024-05-31 13:45 ` Kent Gibson
  2024-06-03 10:40 ` [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Bartosz Golaszewski
  8 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-05-31 13:45 UTC (permalink / raw)
  To: linux-gpio, brgl; +Cc: Kent Gibson

Fix shellcheck SC2046[1], SC2068[2], SC2068[3] and SC2206[4], all of
which are related to avoiding word splitting and globbing.

Signed-off-by: Kent Gibson <warthog618@gmail.com>

[1]https://www.shellcheck.net/wiki/SC2046
[2]https://www.shellcheck.net/wiki/SC2068
[3]https://www.shellcheck.net/wiki/SC2086
[4]https://www.shellcheck.net/wiki/SC2206
---
 tools/gpio-tools-test.bash | 398 ++++++++++++++++++-------------------
 1 file changed, 198 insertions(+), 200 deletions(-)

diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
index 4551dc2..3b93388 100755
--- a/tools/gpio-tools-test.bash
+++ b/tools/gpio-tools-test.bash
@@ -14,7 +14,7 @@ DUT_OUTPUT=gpio-tools-test-output
 # once it exits as the COPROC_PID will be cleared.
 DUT_PID=""
 
-SOURCE_DIR="$(dirname ${BASH_SOURCE[0]})"
+SOURCE_DIR=$(dirname "${BASH_SOURCE[0]}")
 
 # mappings from local name to system chip name, path, dev name
 declare -A GPIOSIM_CHIP_NAME
@@ -70,7 +70,7 @@ gpiosim_chip() {
 	local DEVPATH=$GPIOSIM_CONFIGFS/$NAME
 	local BANKPATH=$DEVPATH/bank0
 
-	mkdir -p $BANKPATH
+	mkdir -p "$BANKPATH"
 
 	for ARG in "$@"
 	do
@@ -80,7 +80,7 @@ gpiosim_chip() {
 
 		if [ "$KEY" = "num_lines" ]
 		then
-			echo $VAL > $BANKPATH/num_lines
+			echo "$VAL" > "$BANKPATH/num_lines"
 		elif [ "$KEY" = "line_name" ]
 		then
 			local OFFSET LINENAME
@@ -88,12 +88,12 @@ gpiosim_chip() {
 			LINENAME=$(echo "$VAL" | cut -d":" -f2)
 			local LINEPATH=$BANKPATH/line$OFFSET
 
-			mkdir -p $LINEPATH
-			echo $LINENAME > $LINEPATH/name
+			mkdir -p "$LINEPATH"
+			echo "$LINENAME" > "$LINEPATH/name"
 		fi
 	done
 
-	echo 1 > $DEVPATH/live
+	echo 1 > "$DEVPATH/live"
 
 	local CHIP_NAME
 	CHIP_NAME=$(<"$BANKPATH/chip_name")
@@ -104,12 +104,12 @@ gpiosim_chip() {
 
 gpiosim_chip_number() {
 	local NAME=${GPIOSIM_CHIP_NAME[$1]}
-	echo ${NAME#"gpiochip"}
+	echo "${NAME#gpiochip}"
 }
 
 gpiosim_chip_symlink() {
 	GPIOSIM_CHIP_LINK="$2/${GPIOSIM_APP_NAME}-$$-lnk"
-	ln -s ${GPIOSIM_CHIP_PATH[$1]} "$GPIOSIM_CHIP_LINK"
+	ln -s "${GPIOSIM_CHIP_PATH[$1]}" "$GPIOSIM_CHIP_LINK"
 }
 
 gpiosim_chip_symlink_cleanup() {
@@ -126,7 +126,7 @@ gpiosim_set_pull() {
 	local DEVNAME=${GPIOSIM_DEV_NAME[$1]}
 	local CHIPNAME=${GPIOSIM_CHIP_NAME[$1]}
 
-	echo $PULL > $GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/pull
+	echo "$PULL" > "$GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/pull"
 }
 
 gpiosim_check_value() {
@@ -135,7 +135,7 @@ gpiosim_check_value() {
 	local DEVNAME=${GPIOSIM_DEV_NAME[$1]}
 	local CHIPNAME=${GPIOSIM_CHIP_NAME[$1]}
 
-	VAL=$(<$GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/value)
+	VAL=$(<"$GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/value")
 	[ "$VAL" = "$EXPECTED" ]
 }
 
@@ -147,20 +147,20 @@ gpiosim_wait_value() {
 	local PORT=$GPIOSIM_SYSFS/$DEVNAME/$CHIPNAME/sim_gpio$OFFSET/value
 
 	for _i in {1..30}; do
-		[ "$(<$PORT)" = "$EXPECTED" ] && return
+		[ "$(<"$PORT")" = "$EXPECTED" ] && return
 		sleep 0.01
 	done
 	return 1
 }
 
 gpiosim_cleanup() {
-	for CHIP in ${!GPIOSIM_CHIP_NAME[@]}
+	for CHIP in "${!GPIOSIM_CHIP_NAME[@]}"
 	do
 		local NAME=${GPIOSIM_APP_NAME}-$$-$CHIP
 
 		local DEVPATH=$GPIOSIM_CONFIGFS/$NAME
 
-		echo 0 > $DEVPATH/live
+		echo 0 > "$DEVPATH/live"
 		find "$DEVPATH" -type d -name hog -exec rmdir '{}' '+'
 		find "$DEVPATH" -type d -name "line*" -exec rmdir '{}' '+'
 		find "$DEVPATH" -type d -name "bank*" -exec rmdir '{}' '+'
@@ -202,9 +202,9 @@ dut_run_redirect() {
 }
 
 dut_read_redirect() {
-	output=$(<$SHUNIT_TMPDIR/$DUT_OUTPUT)
+	output=$(<"$SHUNIT_TMPDIR/$DUT_OUTPUT")
 	local ORIG_IFS="$IFS"
-	IFS=$'\n' lines=($output)
+	IFS=$'\n' mapfile -t lines <<< "$output"
 	IFS="$ORIG_IFS"
 }
 
@@ -220,11 +220,11 @@ dut_read() {
 		fi
 		lines+=("$LINE")
 	done
-	output="${lines[@]}"
+	output="${lines[*]}"
 }
 
 dut_readable() {
-	read -t 0 -u ${COPROC[0]} LINE
+	read -t 0 -u "${COPROC[0]}" LINE
 }
 
 dut_flush() {
@@ -253,17 +253,15 @@ dut_regex_match() {
 }
 
 dut_write() {
-	echo "$@" >&${COPROC[1]}
+	echo "$@" >&"${COPROC[1]}"
 }
 
 dut_kill() {
-	SIGNUM=$1
-
-	kill $SIGNUM $DUT_PID
+	kill "$@" "$DUT_PID"
 }
 
 dut_wait() {
-	wait $DUT_PID
+	wait "$DUT_PID"
 	export status=$?
 	unset DUT_PID
 }
@@ -271,10 +269,10 @@ dut_wait() {
 dut_cleanup() {
 	if [ -n "$DUT_PID" ]
 	then
-		kill -SIGTERM $DUT_PID 2> /dev/null
-		wait $DUT_PID || false
+		kill -SIGTERM "$DUT_PID" 2> /dev/null
+		wait "$DUT_PID" || false
 	fi
-	rm -f $SHUNIT_TMPDIR/$DUT_OUTPUT
+	rm -f "$SHUNIT_TMPDIR/$DUT_OUTPUT"
 }
 
 tearDown() {
@@ -283,7 +281,7 @@ tearDown() {
 }
 
 request_release_line() {
-	$SOURCE_DIR/gpioget -c "$@" >/dev/null
+	"$SOURCE_DIR/gpioget" -c "$@" >/dev/null
 }
 
 #
@@ -332,21 +330,21 @@ test_gpiodetect_a_chip() {
 	local sim2dev=${GPIOSIM_DEV_NAME[sim2]}
 
 	# by name
-	run_tool gpiodetect $sim0
+	run_tool gpiodetect "$sim0"
 
 	output_regex_match "$sim0 \[${sim0dev}[-:]node0\] \(4 lines\)"
 	num_lines_is 1
 	status_is 0
 
 	# by path
-	run_tool gpiodetect ${GPIOSIM_CHIP_PATH[sim1]}
+	run_tool gpiodetect "${GPIOSIM_CHIP_PATH[sim1]}"
 
 	output_regex_match "$sim1 \[${sim1dev}[-:]node0\] \(8 lines\)"
 	num_lines_is 1
 	status_is 0
 
 	# by number
-	run_tool gpiodetect $(gpiosim_chip_number sim2)
+	run_tool gpiodetect "$(gpiosim_chip_number sim2)"
 
 	output_regex_match "$sim2 \[${sim2dev}[-:]node0\] \(16 lines\)"
 	num_lines_is 1
@@ -354,7 +352,7 @@ test_gpiodetect_a_chip() {
 
 	# by symlink
 	gpiosim_chip_symlink sim2 .
-	run_tool gpiodetect $GPIOSIM_CHIP_LINK
+	run_tool gpiodetect "$GPIOSIM_CHIP_LINK"
 
 	output_regex_match "$sim2 \[${sim2dev}[-:]node0\] \(16 lines\)"
 	num_lines_is 1
@@ -373,7 +371,7 @@ test_gpiodetect_multiple_chips() {
 	local sim1dev=${GPIOSIM_DEV_NAME[sim1]}
 	local sim2dev=${GPIOSIM_DEV_NAME[sim2]}
 
-	run_tool gpiodetect $sim0 $sim1 $sim2
+	run_tool gpiodetect "$sim0" "$sim1" "$sim2"
 
 	output_regex_match "$sim0 \[${sim0dev}[-:]node0\] \(4 lines\)"
 	output_regex_match "$sim1 \[${sim1dev}[-:]node0\] \(8 lines\)"
@@ -441,7 +439,7 @@ test_gpioinfo_a_chip() {
 	local sim1=${GPIOSIM_CHIP_NAME[sim1]}
 
 	# by name
-	run_tool gpioinfo --chip $sim1
+	run_tool gpioinfo --chip "$sim1"
 
 	output_contains_line "$sim1 - 4 lines:"
 	output_regex_match "\\s+line\\s+0:\\s+unnamed\\s+input"
@@ -452,7 +450,7 @@ test_gpioinfo_a_chip() {
 	status_is 0
 
 	# by path
-	run_tool gpioinfo --chip $sim1
+	run_tool gpioinfo --chip "$sim1"
 
 	output_contains_line "$sim1 - 4 lines:"
 	output_regex_match "\\s+line\\s+0:\\s+unnamed\\s+input"
@@ -463,7 +461,7 @@ test_gpioinfo_a_chip() {
 	status_is 0
 
 	# by number
-	run_tool gpioinfo --chip $sim1
+	run_tool gpioinfo --chip "$sim1"
 
 	output_contains_line "$sim1 - 4 lines:"
 	output_regex_match "\\s+line\\s+0:\\s+unnamed\\s+input"
@@ -475,7 +473,7 @@ test_gpioinfo_a_chip() {
 
 	# by symlink
 	gpiosim_chip_symlink sim1 .
-	run_tool gpioinfo --chip $GPIOSIM_CHIP_LINK
+	run_tool gpioinfo --chip "$GPIOSIM_CHIP_LINK"
 
 	output_contains_line "$sim1 - 4 lines:"
 	output_regex_match "\\s+line\\s+0:\\s+unnamed\\s+input"
@@ -494,7 +492,7 @@ test_gpioinfo_a_line() {
 	local sim1=${GPIOSIM_CHIP_NAME[sim1]}
 
 	# by offset
-	run_tool gpioinfo --chip $sim1 2
+	run_tool gpioinfo --chip "$sim1" 2
 
 	output_regex_match "$sim1 2\\s+\"bar\"\\s+input"
 	num_lines_is 1
@@ -508,14 +506,14 @@ test_gpioinfo_a_line() {
 	status_is 0
 
 	# by chip and name
-	run_tool gpioinfo --chip $sim1 2
+	run_tool gpioinfo --chip "$sim1" 2
 
 	output_regex_match "$sim1 2\\s+\"bar\"\\s+input"
 	num_lines_is 1
 	status_is 0
 
 	# unquoted
-	run_tool gpioinfo --unquoted --chip $sim1 2
+	run_tool gpioinfo --unquoted --chip "$sim1" 2
 
 	output_regex_match "$sim1 2\\s+bar\\s+input"
 	num_lines_is 1
@@ -547,7 +545,7 @@ test_gpioinfo_multiple_lines() {
 	local sim1=${GPIOSIM_CHIP_NAME[sim1]}
 
 	# by offset
-	run_tool gpioinfo --chip $sim1 1 2
+	run_tool gpioinfo --chip "$sim1" 1 2
 
 	output_regex_match "$sim1 1\\s+unnamed\\s+input"
 	output_regex_match "$sim1 2\\s+\"baz\"\\s+input"
@@ -563,7 +561,7 @@ test_gpioinfo_multiple_lines() {
 	status_is 0
 
 	# by name and offset
-	run_tool gpioinfo --chip $sim0 bar 3
+	run_tool gpioinfo --chip "$sim0" bar 3
 
 	output_regex_match "$sim0 5\\s+\"bar\"\\s+input"
 	output_regex_match "$sim0 3\\s+unnamed\\s+input"
@@ -652,7 +650,7 @@ test_gpioinfo_with_same_line_twice() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by offset
-	run_tool gpioinfo --chip $sim0 1 1
+	run_tool gpioinfo --chip "$sim0" 1 1
 
 	output_regex_match "$sim0 1\\s+\"foo\"\\s+input"
 	output_regex_match ".*lines '1' and '1' are the same line"
@@ -668,7 +666,7 @@ test_gpioinfo_with_same_line_twice() {
 	status_is 1
 
 	# by name and offset
-	run_tool gpioinfo --chip $sim0 foo 1
+	run_tool gpioinfo --chip "$sim0" foo 1
 
 	output_regex_match "$sim0 1\\s+\"foo\"\\s+input"
 	output_regex_match ".*lines 'foo' and '1' are the same line"
@@ -703,7 +701,7 @@ test_gpioinfo_with_lines_strictly_by_name() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# first by offset (to show offsets match first)
-	run_tool gpioinfo --chip $sim0 1 6
+	run_tool gpioinfo --chip "$sim0" 1 6
 
 	output_regex_match "$sim0 1\\s+\"6\"\\s+input"
 	output_regex_match "$sim0 6\\s+\"1\"\\s+input"
@@ -711,7 +709,7 @@ test_gpioinfo_with_lines_strictly_by_name() {
 	status_is 0
 
 	# then strictly by name
-	run_tool gpioinfo --by-name --chip $sim0 1
+	run_tool gpioinfo --by-name --chip "$sim0" 1
 
 	output_regex_match "$sim0 6\\s+\"1\"\\s+input"
 	num_lines_is 1
@@ -734,7 +732,7 @@ test_gpioinfo_with_nonexistent_line() {
 	output_regex_match ".*cannot find line 'nonexistent-line'"
 	status_is 1
 
-	run_tool gpioinfo --chip ${GPIOSIM_CHIP_NAME[sim0]} nonexistent-line
+	run_tool gpioinfo --chip "${GPIOSIM_CHIP_NAME[sim0]}" nonexistent-line
 
 	output_regex_match ".*cannot find line 'nonexistent-line'"
 	status_is 1
@@ -745,7 +743,7 @@ test_gpioinfo_with_offset_out_of_range() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioinfo --chip $sim0 0 1 2 3 4 5
+	run_tool gpioinfo --chip "$sim0" 0 1 2 3 4 5
 
 	output_regex_match "$sim0 0\\s+unnamed\\s+input"
 	output_regex_match "$sim0 1\\s+unnamed\\s+input"
@@ -782,12 +780,12 @@ test_gpioget_by_offset() {
 
 	gpiosim_set_pull sim0 1 pull-up
 
-	run_tool gpioget --chip ${GPIOSIM_CHIP_NAME[sim0]} 1
+	run_tool gpioget --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1
 
 	output_is "\"1\"=active"
 	status_is 0
 
-	run_tool gpioget --unquoted --chip ${GPIOSIM_CHIP_NAME[sim0]} 1
+	run_tool gpioget --unquoted --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1
 
 	output_is "1=active"
 	status_is 0
@@ -799,7 +797,7 @@ test_gpioget_by_symlink() {
 
 	gpiosim_set_pull sim0 1 pull-up
 
-	run_tool gpioget --chip $GPIOSIM_CHIP_LINK 1
+	run_tool gpioget --chip "$GPIOSIM_CHIP_LINK" 1
 
 	output_is "\"1\"=active"
 	status_is 0
@@ -811,12 +809,12 @@ test_gpioget_by_chip_and_name() {
 
 	gpiosim_set_pull sim1 3 pull-up
 
-	run_tool gpioget --chip ${GPIOSIM_CHIP_NAME[sim1]} foo
+	run_tool gpioget --chip "${GPIOSIM_CHIP_NAME[sim1]}" foo
 
 	output_is "\"foo\"=active"
 	status_is 0
 
-	run_tool gpioget --unquoted --chip ${GPIOSIM_CHIP_NAME[sim1]} foo
+	run_tool gpioget --unquoted --chip "${GPIOSIM_CHIP_NAME[sim1]}" foo
 
 	output_is "foo=active"
 	status_is 0
@@ -845,7 +843,7 @@ test_gpioget_multiple_lines() {
 	gpiosim_set_pull sim0 5 pull-up
 	gpiosim_set_pull sim0 7 pull-up
 
-	run_tool gpioget --unquoted --chip ${GPIOSIM_CHIP_NAME[sim0]} 0 1 2 3 4 5 6 7
+	run_tool gpioget --unquoted --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0 1 2 3 4 5 6 7
 
 	output_is \
 "0=inactive 1=inactive 2=active 3=active 4=inactive 5=active 6=inactive 7=active"
@@ -861,7 +859,7 @@ test_gpioget_multiple_lines_by_name_and_offset() {
 	gpiosim_set_pull sim0 4 pull-up
 	gpiosim_set_pull sim0 6 pull-up
 
-	run_tool gpioget --chip $sim0 0 foo 4 bar
+	run_tool gpioget --chip "$sim0" 0 foo 4 bar
 
 	output_is "\"0\"=inactive \"foo\"=active \"4\"=active \"bar\"=active"
 	status_is 0
@@ -890,7 +888,7 @@ test_gpioget_with_numeric_values() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioget --numeric --chip $sim0 0 1 2 3 4 5 6 7
+	run_tool gpioget --numeric --chip "$sim0" 0 1 2 3 4 5 6 7
 
 	output_is "0 0 1 1 0 1 0 1"
 	status_is 0
@@ -906,7 +904,7 @@ test_gpioget_with_active_low() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioget --active-low --unquoted --chip $sim0 0 1 2 3 4 5 6 7
+	run_tool gpioget --active-low --unquoted --chip "$sim0" 0 1 2 3 4 5 6 7
 
 	output_is \
 "0=active 1=active 2=inactive 3=inactive 4=active 5=inactive 6=active 7=inactive"
@@ -937,7 +935,7 @@ test_gpioget_with_pull_up() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioget --bias=pull-up --unquoted --chip $sim0 0 1 2 3 4 5 6 7
+	run_tool gpioget --bias=pull-up --unquoted --chip "$sim0" 0 1 2 3 4 5 6 7
 
 	output_is \
 "0=active 1=active 2=active 3=active 4=active 5=active 6=active 7=active"
@@ -954,7 +952,7 @@ test_gpioget_with_pull_down() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioget --bias=pull-down --unquoted --chip $sim0 0 1 2 3 4 5 6 7
+	run_tool gpioget --bias=pull-down --unquoted --chip "$sim0" 0 1 2 3 4 5 6 7
 
 	output_is \
 "0=inactive 1=inactive 2=inactive 3=inactive 4=inactive 5=inactive 6=inactive 7=inactive"
@@ -1026,12 +1024,12 @@ test_gpioget_with_lines_by_offset() {
 	gpiosim_set_pull sim0 1 pull-up
 	gpiosim_set_pull sim0 6 pull-down
 
-	run_tool gpioget --chip ${GPIOSIM_CHIP_NAME[sim0]} 1 6
+	run_tool gpioget --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1 6
 
 	output_is "\"1\"=active \"6\"=inactive"
 	status_is 0
 
-	run_tool gpioget --unquoted --chip ${GPIOSIM_CHIP_NAME[sim0]} 1 6
+	run_tool gpioget --unquoted --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1 6
 
 	output_is "1=active 6=inactive"
 	status_is 0
@@ -1045,12 +1043,12 @@ test_gpioget_with_lines_strictly_by_name() {
 	gpiosim_set_pull sim0 1 pull-up
 	gpiosim_set_pull sim0 6 pull-down
 
-	run_tool gpioget --by-name --chip ${GPIOSIM_CHIP_NAME[sim0]} 1 6
+	run_tool gpioget --by-name --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1 6
 
 	output_is "\"1\"=inactive \"6\"=active"
 	status_is 0
 
-	run_tool gpioget --by-name --unquoted --chip ${GPIOSIM_CHIP_NAME[sim0]} 1 6
+	run_tool gpioget --by-name --unquoted --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1 6
 
 	output_is "1=inactive 6=active"
 	status_is 0
@@ -1066,7 +1064,7 @@ test_gpioget_with_no_arguments() {
 test_gpioget_with_chip_but_no_line_specified() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioget --chip ${GPIOSIM_CHIP_NAME[sim0]}
+	run_tool gpioget --chip "${GPIOSIM_CHIP_NAME[sim0]}"
 
 	output_regex_match ".*at least one GPIO line must be specified"
 	status_is 1
@@ -1076,7 +1074,7 @@ test_gpioget_with_offset_out_of_range() {
 	gpiosim_chip sim0 num_lines=4
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioget --chip $sim0 0 1 2 3 4 5
+	run_tool gpioget --chip "$sim0" 0 1 2 3 4 5
 
 	output_regex_match ".*offset 4 is out of range on chip '$sim0'"
 	output_regex_match ".*offset 5 is out of range on chip '$sim0'"
@@ -1095,7 +1093,7 @@ test_gpioget_with_same_line_twice() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by offset
-	run_tool gpioget --chip $sim0 0 0
+	run_tool gpioget --chip "$sim0" 0 0
 
 	output_regex_match ".*lines '0' and '0' are the same line"
 	status_is 1
@@ -1107,19 +1105,19 @@ test_gpioget_with_same_line_twice() {
 	status_is 1
 
 	# by chip and name
-	run_tool gpioget --chip $sim0 foo foo
+	run_tool gpioget --chip "$sim0" foo foo
 
 	output_regex_match ".*lines 'foo' and 'foo' are the same line"
 	status_is 1
 
 	# by name and offset
-	run_tool gpioget --chip $sim0 foo 1
+	run_tool gpioget --chip "$sim0" foo 1
 
 	output_regex_match ".*lines 'foo' and '1' are the same line"
 	status_is 1
 
 	# by offset and name
-	run_tool gpioget --chip $sim0 1 foo
+	run_tool gpioget --chip "$sim0" 1 foo
 
 	output_regex_match ".*lines '1' and 'foo' are the same line"
 	status_is 1
@@ -1128,7 +1126,7 @@ test_gpioget_with_same_line_twice() {
 test_gpioget_with_invalid_bias() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioget --bias=bad --chip ${GPIOSIM_CHIP_NAME[sim0]} 0 1
+	run_tool gpioget --bias=bad --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0 1
 
 	output_regex_match ".*invalid bias.*"
 	status_is 1
@@ -1137,7 +1135,7 @@ test_gpioget_with_invalid_bias() {
 test_gpioget_with_invalid_hold_period() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioget --hold-period=bad --chip ${GPIOSIM_CHIP_NAME[sim0]} 0
+	run_tool gpioget --hold-period=bad --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0
 
 	output_regex_match ".*invalid period.*"
 	status_is 1
@@ -1158,7 +1156,7 @@ test_gpioset_by_name() {
 test_gpioset_by_offset() {
 	gpiosim_chip sim0 num_lines=8
 
-	dut_run gpioset --banner --chip ${GPIOSIM_CHIP_NAME[sim0]} 1=1
+	dut_run gpioset --banner --chip "${GPIOSIM_CHIP_NAME[sim0]}" 1=1
 
 	gpiosim_check_value sim0 1 1
 }
@@ -1167,7 +1165,7 @@ test_gpioset_by_symlink() {
 	gpiosim_chip sim0 num_lines=8
 	gpiosim_chip_symlink sim0 .
 
-	dut_run gpioset --banner --chip $GPIOSIM_CHIP_LINK 1=1
+	dut_run gpioset --banner --chip "$GPIOSIM_CHIP_LINK" 1=1
 
 	gpiosim_check_value sim0 1 1
 }
@@ -1176,7 +1174,7 @@ test_gpioset_by_chip_and_name() {
 	gpiosim_chip sim0 num_lines=8 line_name=1:foo
 	gpiosim_chip sim1 num_lines=8 line_name=3:foo
 
-	dut_run gpioset --banner --chip ${GPIOSIM_CHIP_NAME[sim1]} foo=1
+	dut_run gpioset --banner --chip "${GPIOSIM_CHIP_NAME[sim1]}" foo=1
 
 	gpiosim_check_value sim1 3 1
 }
@@ -1198,7 +1196,7 @@ test_gpioset_multiple_lines() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpioset --banner --chip $sim0 0=0 1=0 2=1 3=1 4=1 5=1 6=0 7=1
+	dut_run gpioset --banner --chip "$sim0" 0=0 1=0 2=1 3=1 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
 	gpiosim_check_value sim0 1 0
@@ -1213,7 +1211,7 @@ test_gpioset_multiple_lines() {
 test_gpioset_multiple_lines_by_name_and_offset() {
 	gpiosim_chip sim0 num_lines=4 line_name=1:foo line_name=2:bar
 
-	dut_run gpioset --banner --chip ${GPIOSIM_CHIP_NAME[sim0]} 0=1 foo=1 bar=1 3=1
+	dut_run gpioset --banner --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0=1 foo=1 bar=1 3=1
 
 	gpiosim_check_value sim0 0 1
 	gpiosim_check_value sim0 1 1
@@ -1238,7 +1236,7 @@ test_gpioset_with_active_low() {
 	gpiosim_chip sim0 num_lines=8
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpioset --banner --active-low -c $sim0 \
+	dut_run gpioset --banner --active-low -c "$sim0" \
 		0=0 1=0 2=1 3=1 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 1
@@ -1272,7 +1270,7 @@ test_gpioset_with_push_pull() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpioset --banner --drive=push-pull --chip $sim0 \
+	dut_run gpioset --banner --drive=push-pull --chip "$sim0" \
 		0=0 1=0 2=1 3=1 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
@@ -1295,7 +1293,7 @@ test_gpioset_with_open_drain() {
 	gpiosim_set_pull sim0 5 pull-up
 	gpiosim_set_pull sim0 7 pull-up
 
-	dut_run gpioset --banner --drive=open-drain --chip $sim0 \
+	dut_run gpioset --banner --drive=open-drain --chip "$sim0" \
 		0=0 1=0 2=1 3=1 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
@@ -1318,7 +1316,7 @@ test_gpioset_with_open_source() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpioset --banner --drive=open-source --chip $sim0 \
+	dut_run gpioset --banner --drive=open-source --chip "$sim0" \
 		0=0 1=0 2=1 3=0 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
@@ -1337,7 +1335,7 @@ test_gpioset_with_pull_up() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpioset --banner --bias=pull-up --drive=open-drain \
-		--chip $sim0 0=0 1=0 2=1 3=0 4=1 5=1 6=0 7=1
+		--chip "$sim0" 0=0 1=0 2=1 3=0 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
 	gpiosim_check_value sim0 1 0
@@ -1355,7 +1353,7 @@ test_gpioset_with_pull_down() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpioset --banner --bias=pull-down --drive=open-source \
-		--chip $sim0 0=0 1=0 2=1 3=0 4=1 5=1 6=0 7=1
+		--chip "$sim0" 0=0 1=0 2=1 3=0 4=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 0 0
 	gpiosim_check_value sim0 1 0
@@ -1381,7 +1379,7 @@ test_gpioset_with_value_variants() {
 	gpiosim_set_pull sim0 6 pull-up
 	gpiosim_set_pull sim0 7 pull-down
 
-	dut_run gpioset --banner --chip $sim0 0=0 1=1 2=active \
+	dut_run gpioset --banner --chip "$sim0" 0=0 1=1 2=active \
 		3=inactive 4=on 5=off 6=false 7=true
 
 	gpiosim_check_value sim0 0 0
@@ -1401,7 +1399,7 @@ test_gpioset_with_hold_period() {
 
 	gpiosim_set_pull sim0 5 pull-up
 
-	dut_run gpioset --banner --hold-period=1200ms -t0 --chip $sim0 0=1 5=0 7=1
+	dut_run gpioset --banner --hold-period=1200ms -t0 --chip "$sim0" 0=1 5=0 7=1
 
 	gpiosim_check_value sim0 0 1
 	gpiosim_check_value sim0 5 0
@@ -1417,7 +1415,7 @@ test_gpioset_interactive_exit() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpioset --interactive --chip $sim0 1=0 2=1 5=1 6=0 7=1
+	dut_run gpioset --interactive --chip "$sim0" 1=0 2=1 5=1 6=0 7=1
 
 	gpiosim_check_value sim0 1 0
 	gpiosim_check_value sim0 2 1
@@ -1656,7 +1654,7 @@ test_gpioset_with_lines_by_offset() {
 	gpiosim_set_pull sim0 1 pull-down
 	gpiosim_set_pull sim0 6 pull-up
 
-	dut_run gpioset --banner --chip ${GPIOSIM_CHIP_NAME[sim0]} 6=1 1=0
+	dut_run gpioset --banner --chip "${GPIOSIM_CHIP_NAME[sim0]}" 6=1 1=0
 
 	gpiosim_check_value sim0 1 0
 	gpiosim_check_value sim0 6 1
@@ -1670,7 +1668,7 @@ test_gpioset_with_lines_strictly_by_name() {
 	gpiosim_set_pull sim0 1 pull-down
 	gpiosim_set_pull sim0 6 pull-up
 
-	dut_run gpioset --banner --by-name --chip ${GPIOSIM_CHIP_NAME[sim0]} 6=1 1=0
+	dut_run gpioset --banner --by-name --chip "${GPIOSIM_CHIP_NAME[sim0]}" 6=1 1=0
 
 	gpiosim_check_value sim0 1 1
 	gpiosim_check_value sim0 6 0
@@ -1708,7 +1706,7 @@ test_gpioset_with_no_arguments() {
 test_gpioset_with_chip_but_no_line_specified() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioset --chip ${GPIOSIM_CHIP_NAME[sim0]}
+	run_tool gpioset --chip "${GPIOSIM_CHIP_NAME[sim0]}"
 
 	output_regex_match ".*at least one GPIO line value must be specified"
 	status_is 1
@@ -1719,7 +1717,7 @@ test_gpioset_with_offset_out_of_range() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioset --chip $sim0 0=1 1=1 2=1 3=1 4=1 5=1
+	run_tool gpioset --chip "$sim0" 0=1 1=1 2=1 3=1 4=1 5=1
 
 	output_regex_match ".*offset 4 is out of range on chip '$sim0'"
 	output_regex_match ".*offset 5 is out of range on chip '$sim0'"
@@ -1731,7 +1729,7 @@ test_gpioset_with_invalid_hold_period() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioset --hold-period=bad --chip $sim0 0=1
+	run_tool gpioset --hold-period=bad --chip "$sim0" 0=1
 
 	output_regex_match ".*invalid period.*"
 	status_is 1
@@ -1743,13 +1741,13 @@ test_gpioset_with_invalid_value() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by name
-	run_tool gpioset --chip $sim0 0=c
+	run_tool gpioset --chip "$sim0" 0=c
 
 	output_regex_match ".*invalid line value.*"
 	status_is 1
 
 	# by value
-	run_tool gpioset --chip $sim0 0=3
+	run_tool gpioset --chip "$sim0" 0=3
 
 	output_regex_match ".*invalid line value.*"
 	status_is 1
@@ -1758,7 +1756,7 @@ test_gpioset_with_invalid_value() {
 test_gpioset_with_invalid_offset() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioset --chip ${GPIOSIM_CHIP_NAME[sim0]} 4000000000=0
+	run_tool gpioset --chip "${GPIOSIM_CHIP_NAME[sim0]}" 4000000000=0
 
 	output_regex_match ".*cannot find line '4000000000'"
 	status_is 1
@@ -1767,7 +1765,7 @@ test_gpioset_with_invalid_offset() {
 test_gpioset_with_invalid_bias() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioset --bias=bad --chip ${GPIOSIM_CHIP_NAME[sim0]} 0=1 1=1
+	run_tool gpioset --bias=bad --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0=1 1=1
 
 	output_regex_match ".*invalid bias.*"
 	status_is 1
@@ -1776,7 +1774,7 @@ test_gpioset_with_invalid_bias() {
 test_gpioset_with_invalid_drive() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpioset --drive=bad --chip ${GPIOSIM_CHIP_NAME[sim0]} 0=1 1=1
+	run_tool gpioset --drive=bad --chip "${GPIOSIM_CHIP_NAME[sim0]}" 0=1 1=1
 
 	output_regex_match ".*invalid drive.*"
 	status_is 1
@@ -1787,7 +1785,7 @@ test_gpioset_with_interactive_and_toggle() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpioset --interactive --toggle 1s --chip $sim0 0=1
+	run_tool gpioset --interactive --toggle 1s --chip "$sim0" 0=1
 
 	output_regex_match ".*can't combine interactive with toggle"
 	status_is 1
@@ -1806,25 +1804,25 @@ test_gpioset_with_same_line_twice() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by offset
-	run_tool gpioset --chip $sim0 0=1 0=1
+	run_tool gpioset --chip "$sim0" 0=1 0=1
 
 	output_regex_match ".*lines '0' and '0' are the same line"
 	status_is 1
 
 	# by name
-	run_tool gpioset --chip $sim0 foo=1 foo=1
+	run_tool gpioset --chip "$sim0" foo=1 foo=1
 
 	output_regex_match ".*lines 'foo' and 'foo' are the same line"
 	status_is 1
 
 	# by name and offset
-	run_tool gpioset --chip $sim0 foo=1 1=1
+	run_tool gpioset --chip "$sim0" foo=1 1=1
 
 	output_regex_match ".*lines 'foo' and '1' are the same line"
 	status_is 1
 
 	# by offset and name
-	run_tool gpioset --chip $sim0 1=1 foo=1
+	run_tool gpioset --chip "$sim0" 1=1 foo=1
 
 	output_regex_match ".*lines '1' and 'foo' are the same line"
 	status_is 1
@@ -1856,7 +1854,7 @@ test_gpiomon_by_offset() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpiomon --banner --edges=rising --chip $sim0 4
+	dut_run gpiomon --banner --edges=rising --chip "$sim0" 4
 	dut_regex_match "Monitoring line .*"
 
 	gpiosim_set_pull sim0 4 pull-down
@@ -1874,7 +1872,7 @@ test_gpiomon_by_symlink() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpiomon --banner --edges=rising --chip $GPIOSIM_CHIP_LINK 4
+	dut_run gpiomon --banner --edges=rising --chip "$GPIOSIM_CHIP_LINK" 4
 	dut_regex_match "Monitoring line .*"
 
 	gpiosim_set_pull sim0 4 pull-down
@@ -1893,7 +1891,7 @@ test_gpiomon_by_chip_and_name() {
 
 	gpiosim_set_pull sim1 0 pull-up
 
-	dut_run gpiomon --banner --edges=rising --chip $sim1 foo
+	dut_run gpiomon --banner --edges=rising --chip "$sim1" foo
 	dut_regex_match "Monitoring line .*"
 
 	gpiosim_set_pull sim1 2 pull-down
@@ -1925,7 +1923,7 @@ test_gpiomon_rising_edge() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpiomon --banner --edges=rising --chip $sim0 4
+	dut_run gpiomon --banner --edges=rising --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-down
@@ -1941,7 +1939,7 @@ test_gpiomon_falling_edge() {
 
 	gpiosim_set_pull sim0 4 pull-down
 
-	dut_run gpiomon --banner --edges=falling --chip $sim0 4
+	dut_run gpiomon --banner --edges=falling --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -1955,7 +1953,7 @@ test_gpiomon_both_edges() {
 	gpiosim_chip sim0 num_lines=8
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --edges=both --chip $sim0 4
+	dut_run gpiomon --banner --edges=both --chip "$sim0" 4
 	dut_regex_match "Monitoring line .*"
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -1971,7 +1969,7 @@ test_gpiomon_with_pull_up() {
 
 	gpiosim_set_pull sim0 4 pull-down
 
-	dut_run gpiomon --banner --bias=pull-up --chip $sim0 4
+	dut_run gpiomon --banner --bias=pull-up --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-down
@@ -1986,7 +1984,7 @@ test_gpiomon_with_pull_down() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpiomon --banner --bias=pull-down --chip $sim0 4
+	dut_run gpiomon --banner --bias=pull-down --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2002,7 +2000,7 @@ test_gpiomon_with_active_low() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpiomon --banner --active-low --chip $sim0 4
+	dut_run gpiomon --banner --active-low --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-down
@@ -2035,7 +2033,7 @@ test_gpiomon_with_quiet_mode() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --edges=rising --quiet --chip $sim0 4
+	dut_run gpiomon --banner --edges=rising --quiet --chip "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2063,7 +2061,7 @@ test_gpiomon_with_num_events() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# redirect, as gpiomon exits after 4 events
-	dut_run_redirect gpiomon --num-events=4 --chip $sim0 4
+	dut_run_redirect gpiomon --num-events=4 --chip "$sim0" 4
 
 	gpiosim_set_pull sim0 4 pull-up
 	sleep 0.01
@@ -2107,7 +2105,7 @@ test_gpiomon_with_idle_timeout() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# redirect, as gpiomon exits
-	dut_run_redirect gpiomon --idle-timeout 10ms --chip $sim0 4
+	dut_run_redirect gpiomon --idle-timeout 10ms --chip "$sim0" 4
 
 	dut_wait
 	status_is 0
@@ -2120,7 +2118,7 @@ test_gpiomon_multiple_lines() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --format=%o --chip $sim0 1 3 2 5 4
+	dut_run gpiomon --banner --format=%o --chip "$sim0" 1 3 2 5 4
 	dut_regex_match "Monitoring lines .*"
 
 	gpiosim_set_pull sim0 2 pull-up
@@ -2138,7 +2136,7 @@ test_gpiomon_multiple_lines_by_name_and_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --format=%o --chip $sim0 foo bar 3
+	dut_run gpiomon --banner --format=%o --chip "$sim0" foo bar 3
 	dut_regex_match "Monitoring lines .*"
 
 	gpiosim_set_pull sim0 2 pull-up
@@ -2173,7 +2171,7 @@ test_gpiomon_exit_after_SIGINT() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --chip $sim0 4
+	dut_run gpiomon --banner --chip "$sim0" 4
 	dut_regex_match "Monitoring line .*"
 
 	dut_kill -SIGINT
@@ -2187,7 +2185,7 @@ test_gpiomon_exit_after_SIGTERM() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner --chip $sim0 4
+	dut_run gpiomon --banner --chip "$sim0" 4
 	dut_regex_match "Monitoring line .*"
 
 	dut_kill -SIGTERM
@@ -2209,7 +2207,7 @@ test_gpiomon_with_same_line_twice() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by offset
-	run_tool gpiomon --chip $sim0 0 0
+	run_tool gpiomon --chip "$sim0" 0 0
 
 	output_regex_match ".*lines '0' and '0' are the same line"
 	status_is 1
@@ -2221,7 +2219,7 @@ test_gpiomon_with_same_line_twice() {
 	status_is 1
 
 	# by name and offset
-	run_tool gpiomon --chip $sim0 1 foo
+	run_tool gpiomon --chip "$sim0" 1 foo
 
 	output_regex_match ".*lines '1' and 'foo' are the same line"
 	status_is 1
@@ -2248,7 +2246,7 @@ test_gpiomon_with_lines_by_offset() {
 
 	gpiosim_set_pull sim0 1 pull-up
 
-	dut_run gpiomon --banner --chip $sim0 6 1
+	dut_run gpiomon --banner --chip "$sim0" 6 1
 	dut_flush
 
 	gpiosim_set_pull sim0 1 pull-down
@@ -2275,7 +2273,7 @@ test_gpiomon_with_lines_strictly_by_name() {
 
 	gpiosim_set_pull sim0 1 pull-up
 
-	dut_run gpiomon --banner --by-name --chip $sim0 42 13
+	dut_run gpiomon --banner --by-name --chip "$sim0" 42 13
 	dut_flush
 
 	gpiosim_set_pull sim0 1 pull-down
@@ -2303,7 +2301,7 @@ test_gpiomon_with_no_arguments() {
 test_gpiomon_with_no_line_specified() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpiomon --chip ${GPIOSIM_CHIP_NAME[sim0]}
+	run_tool gpiomon --chip "${GPIOSIM_CHIP_NAME[sim0]}"
 
 	output_regex_match ".*at least one GPIO line must be specified"
 	status_is 1
@@ -2314,7 +2312,7 @@ test_gpiomon_with_offset_out_of_range() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpiomon --chip $sim0 5
+	run_tool gpiomon --chip "$sim0" 5
 
 	output_regex_match ".*offset 5 is out of range on chip '$sim0'"
 	status_is 1
@@ -2325,7 +2323,7 @@ test_gpiomon_with_invalid_bias() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpiomon --bias=bad -c $sim0 0 1
+	run_tool gpiomon --bias=bad -c "$sim0" 0 1
 
 	output_regex_match ".*invalid bias.*"
 	status_is 1
@@ -2336,7 +2334,7 @@ test_gpiomon_with_invalid_debounce_period() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpiomon --debounce-period bad -c $sim0 0 1
+	run_tool gpiomon --debounce-period bad -c "$sim0" 0 1
 
 	output_regex_match ".*invalid period: bad"
 	status_is 1
@@ -2347,7 +2345,7 @@ test_gpiomon_with_invalid_idle_timeout() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpiomon --idle-timeout bad -c $sim0 0 1
+	run_tool gpiomon --idle-timeout bad -c "$sim0" 0 1
 
 	output_regex_match ".*invalid period: bad"
 	status_is 1
@@ -2358,7 +2356,7 @@ test_gpiomon_with_custom_format_event_type_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%e %o" -c $sim0 4
+	dut_run gpiomon --banner "--format=%e %o" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2371,7 +2369,7 @@ test_gpiomon_with_custom_format_event_type_offset_joined() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%e%o" -c $sim0 4
+	dut_run gpiomon --banner "--format=%e%o" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2384,7 +2382,7 @@ test_gpiomon_with_custom_format_edge_chip_and_line() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%e %o %E %c %l" -c $sim0 baz
+	dut_run gpiomon --banner "--format=%e %o %E %c %l" -c "$sim0" baz
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2396,7 +2394,7 @@ test_gpiomon_with_custom_format_seconds_timestamp() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%e %o %S" -c $sim0 4
+	dut_run gpiomon --banner "--format=%e %o %S" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2409,7 +2407,7 @@ test_gpiomon_with_custom_format_UTC_timestamp() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpiomon --banner "--format=%U %e %o " --event-clock=realtime \
-		-c $sim0 4
+		-c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2423,7 +2421,7 @@ test_gpiomon_with_custom_format_localtime_timestamp() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpiomon --banner "--format=%L %e %o" --event-clock=realtime \
-		-c $sim0 4
+		-c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2436,7 +2434,7 @@ test_gpiomon_with_custom_format_double_percent_sign() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=start%%end" -c $sim0 4
+	dut_run gpiomon --banner "--format=start%%end" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2449,7 +2447,7 @@ test_gpiomon_with_custom_format_double_percent_sign_event_type_specifier() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%%e" -c $sim0 4
+	dut_run gpiomon --banner "--format=%%e" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2462,7 +2460,7 @@ test_gpiomon_with_custom_format_single_percent_sign() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%" -c $sim0 4
+	dut_run gpiomon --banner "--format=%" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2475,7 +2473,7 @@ test_gpiomon_with_custom_format_single_percent_sign_between_other_characters() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=foo % bar" -c $sim0 4
+	dut_run gpiomon --banner "--format=foo % bar" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2488,7 +2486,7 @@ test_gpiomon_with_custom_format_unknown_specifier() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpiomon --banner "--format=%x" -c $sim0 4
+	dut_run gpiomon --banner "--format=%x" -c "$sim0" 4
 	dut_flush
 
 	gpiosim_set_pull sim0 4 pull-up
@@ -2508,7 +2506,7 @@ test_gpionotify_by_name() {
 	dut_run gpionotify --banner foo
 	dut_regex_match "Watching line .*"
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"foo\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"foo\""
@@ -2520,10 +2518,10 @@ test_gpionotify_by_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --chip $sim0 4
+	dut_run gpionotify --banner --chip "$sim0" 4
 	dut_regex_match "Watching line .*"
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 4"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 4"
 
@@ -2536,10 +2534,10 @@ test_gpionotify_by_symlink() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --chip $GPIOSIM_CHIP_LINK 4
+	dut_run gpionotify --banner --chip "$GPIOSIM_CHIP_LINK" 4
 	dut_regex_match "Watching line .*"
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0\\s+4"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0\\s+4"
 
@@ -2552,10 +2550,10 @@ test_gpionotify_by_chip_and_name() {
 
 	local sim1=${GPIOSIM_CHIP_NAME[sim1]}
 
-	dut_run gpionotify --banner --chip $sim1 foo
+	dut_run gpionotify --banner --chip "$sim1" foo
 	dut_regex_match "Watching line .*"
 
-	request_release_line $sim1 2
+	request_release_line "$sim1" 2
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim1 2 \"foo\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim1 2 \"foo\""
 
@@ -2572,7 +2570,7 @@ test_gpionotify_first_matching_named_line() {
 	dut_run gpionotify --banner foobar
 	dut_regex_match "Watching line .*"
 
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 3
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 3
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"foobar\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"foobar\""
 
@@ -2586,10 +2584,10 @@ test_gpionotify_with_requested() {
 
 	gpiosim_set_pull sim0 4 pull-up
 
-	dut_run gpionotify --banner --event=requested --chip $sim0 4
+	dut_run gpionotify --banner --event=requested --chip "$sim0" 4
 	dut_flush
 
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 4
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 4"
 	assert_fail dut_readable
 }
@@ -2600,10 +2598,10 @@ test_gpionotify_with_released() {
 
 	gpiosim_set_pull sim0 4 pull-down
 
-	dut_run gpionotify --banner --event=released --chip $sim0 4
+	dut_run gpionotify --banner --event=released --chip "$sim0" 4
 	dut_flush
 
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 4
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 4"
 	assert_fail dut_readable
 }
@@ -2613,10 +2611,10 @@ test_gpionotify_with_quiet_mode() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --quiet --chip $sim0 4
+	dut_run gpionotify --banner --quiet --chip "$sim0" 4
 	dut_flush
 
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 4
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 4
 	assert_fail dut_readable
 }
 
@@ -2628,7 +2626,7 @@ test_gpionotify_with_unquoted() {
 	dut_run gpionotify --banner --unquoted foo
 	dut_regex_match "Watching line .*"
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+foo"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+foo"
@@ -2640,11 +2638,11 @@ test_gpionotify_with_num_events() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# redirect, as gpionotify exits after 4 events
-	dut_run_redirect gpionotify --num-events=4 --chip $sim0 3 4
+	dut_run_redirect gpionotify --num-events=4 --chip "$sim0" 3 4
 
 
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 4
-	request_release_line ${GPIOSIM_CHIP_NAME[sim0]} 3
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 4
+	request_release_line "${GPIOSIM_CHIP_NAME[sim0]}" 3
 
 	dut_wait
 	status_is 0
@@ -2663,7 +2661,7 @@ test_gpionotify_with_idle_timeout() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# redirect, as gpionotify exits
-	dut_run_redirect gpionotify --idle-timeout 10ms --chip $sim0 3 4
+	dut_run_redirect gpionotify --idle-timeout 10ms --chip "$sim0" 3 4
 
 	dut_wait
 	status_is 0
@@ -2677,18 +2675,18 @@ test_gpionotify_multiple_lines() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --chip $sim0 1 2 3 4 5
+	dut_run gpionotify --banner --chip "$sim0" 1 2 3 4 5
 	dut_regex_match "Watching lines .*"
 
-	request_release_line $sim0 2
+	request_release_line "$sim0" 2
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 2"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 2"
 
-	request_release_line $sim0 3
+	request_release_line "$sim0" 3
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 3"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 3"
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 4"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 4"
 
@@ -2700,18 +2698,18 @@ test_gpionotify_multiple_lines_by_name_and_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --chip $sim0 bar foo 3
+	dut_run gpionotify --banner --chip "$sim0" bar foo 3
 	dut_regex_match "Watching lines .*"
 
-	request_release_line $sim0 2
+	request_release_line "$sim0" 2
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 2\\s+\"bar\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 2\\s+\"bar\""
 
-	request_release_line $sim0 1
+	request_release_line "$sim0" 1
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 1\\s+\"foo\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 1\\s+\"foo\""
 
-	request_release_line $sim0 3
+	request_release_line "$sim0" 3
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 3"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 3"
 
@@ -2728,19 +2726,19 @@ test_gpionotify_multiple_lines_across_multiple_chips() {
 	dut_run gpionotify --banner baz bar foo xyz
 	dut_regex_match "Watching lines .*"
 
-	request_release_line $sim0 2
+	request_release_line "$sim0" 2
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"bar\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"bar\""
 
-	request_release_line $sim0 1
+	request_release_line "$sim0" 1
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"foo\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"foo\""
 
-	request_release_line $sim1 4
+	request_release_line "$sim1" 4
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"xyz\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"xyz\""
 
-	request_release_line $sim1 0
+	request_release_line "$sim1" 0
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+\"baz\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+\"baz\""
 
@@ -2750,7 +2748,7 @@ test_gpionotify_multiple_lines_across_multiple_chips() {
 test_gpionotify_exit_after_SIGINT() {
 	gpiosim_chip sim0 num_lines=8
 
-	dut_run gpionotify --banner --chip ${GPIOSIM_CHIP_NAME[sim0]} 4
+	dut_run gpionotify --banner --chip "${GPIOSIM_CHIP_NAME[sim0]}" 4
 	dut_regex_match "Watching line .*"
 
 	dut_kill -SIGINT
@@ -2762,7 +2760,7 @@ test_gpionotify_exit_after_SIGINT() {
 test_gpionotify_exit_after_SIGTERM() {
 	gpiosim_chip sim0 num_lines=8
 
-	dut_run gpionotify --banner --chip ${GPIOSIM_CHIP_NAME[sim0]} 4
+	dut_run gpionotify --banner --chip "${GPIOSIM_CHIP_NAME[sim0]}" 4
 	dut_regex_match "Watching line .*"
 
 	dut_kill -SIGTERM
@@ -2784,7 +2782,7 @@ test_gpionotify_with_same_line_twice() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	# by offset
-	run_tool gpionotify --chip $sim0 0 0
+	run_tool gpionotify --chip "$sim0" 0 0
 
 	output_regex_match ".*lines '0' and '0' are the same line"
 	num_lines_is 1
@@ -2798,7 +2796,7 @@ test_gpionotify_with_same_line_twice() {
 	status_is 1
 
 	# by name and offset
-	run_tool gpionotify --chip $sim0 1 foo
+	run_tool gpionotify --chip "$sim0" 1 foo
 
 	output_regex_match ".*lines '1' and 'foo' are the same line"
 	num_lines_is 1
@@ -2825,14 +2823,14 @@ test_gpionotify_with_lines_by_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --chip $sim0 1
+	dut_run gpionotify --banner --chip "$sim0" 1
 	dut_flush
 
-	request_release_line $sim0 1
+	request_release_line "$sim0" 1
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 1"
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 1"
 
-	request_release_line $sim0 6
+	request_release_line "$sim0" 6
 
 	assert_fail dut_readable
 }
@@ -2844,14 +2842,14 @@ test_gpionotify_with_lines_strictly_by_name() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --by-name --chip $sim0 1
+	dut_run gpionotify --banner --by-name --chip "$sim0" 1
 	dut_flush
 
-	request_release_line $sim0 6
+	request_release_line "$sim0" 6
 	dut_regex_match "[0-9]+\.[0-9]+\\s+requested\\s+$sim0 6 \"1\""
 	dut_regex_match "[0-9]+\.[0-9]+\\s+released\\s+$sim0 6 \"1\""
 
-	request_release_line $sim0 1
+	request_release_line "$sim0" 1
 	assert_fail dut_readable
 }
 
@@ -2865,7 +2863,7 @@ test_gpionotify_with_no_arguments() {
 test_gpionotify_with_no_line_specified() {
 	gpiosim_chip sim0 num_lines=8
 
-	run_tool gpionotify --chip ${GPIOSIM_CHIP_NAME[sim0]}
+	run_tool gpionotify --chip "${GPIOSIM_CHIP_NAME[sim0]}"
 
 	output_regex_match ".*at least one GPIO line must be specified"
 	status_is 1
@@ -2876,7 +2874,7 @@ test_gpionotify_with_offset_out_of_range() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpionotify --chip $sim0 5
+	run_tool gpionotify --chip "$sim0" 5
 
 	output_regex_match ".*offset 5 is out of range on chip '$sim0'"
 	status_is 1
@@ -2887,7 +2885,7 @@ test_gpionotify_with_invalid_idle_timeout() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	run_tool gpionotify --idle-timeout bad -c $sim0 0 1
+	run_tool gpionotify --idle-timeout bad -c "$sim0" 0 1
 
 	output_regex_match ".*invalid period: bad"
 	status_is 1
@@ -2898,10 +2896,10 @@ test_gpionotify_with_custom_format_event_type_offset() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=%e %o" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=%e %o" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "1 4"
 }
@@ -2911,10 +2909,10 @@ test_gpionotify_with_custom_format_event_type_offset_joined() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=%e%o" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=%e%o" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "14"
 }
@@ -2925,10 +2923,10 @@ test_gpionotify_with_custom_format_event_chip_and_line() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpionotify --banner --event=released \
-		"--format=%e %o %E %c %l" -c $sim0 baz
+		"--format=%e %o %E %c %l" -c "$sim0" baz
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match "2 4 released $sim0 baz"
 }
 
@@ -2938,10 +2936,10 @@ test_gpionotify_with_custom_format_seconds_timestamp() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpionotify --banner --event=requested "--format=%e %o %S" \
-		-c $sim0 4
+		-c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match "1 4 [0-9]+\\.[0-9]+"
 }
 
@@ -2951,10 +2949,10 @@ test_gpionotify_with_custom_format_UTC_timestamp() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpionotify --banner --event=released \
-		"--format=%U %e %o" -c $sim0 4
+		"--format=%U %e %o" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match \
 "[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\\.[0-9]+Z 2 4"
 }
@@ -2965,10 +2963,10 @@ test_gpionotify_with_custom_format_localtime_timestamp() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpionotify --banner --event=released \
-		"--format=%L %e %o" -c $sim0 4
+		"--format=%L %e %o" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_regex_match \
 "[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\\.[0-9]+ 2 4"
 }
@@ -2979,10 +2977,10 @@ test_gpionotify_with_custom_format_double_percent_sign() {
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
 	dut_run gpionotify --banner --event=requested "--format=start%%end" \
-		-c $sim0 4
+		-c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "start%end"
 }
@@ -2992,10 +2990,10 @@ test_gpionotify_with_custom_format_double_percent_sign_event_type_specifier() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=%%e" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=%%e" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "%e"
 }
@@ -3005,10 +3003,10 @@ test_gpionotify_with_custom_format_single_percent_sign() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=%" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=%" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "%"
 }
@@ -3018,10 +3016,10 @@ test_gpionotify_with_custom_format_single_percent_sign_between_other_characters(
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=foo % bar" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=foo % bar" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "foo % bar"
 }
@@ -3031,10 +3029,10 @@ test_gpionotify_with_custom_format_unknown_specifier() {
 
 	local sim0=${GPIOSIM_CHIP_NAME[sim0]}
 
-	dut_run gpionotify --banner --event=requested "--format=%x" -c $sim0 4
+	dut_run gpionotify --banner --event=requested "--format=%x" -c "$sim0" 4
 	dut_flush
 
-	request_release_line $sim0 4
+	request_release_line "$sim0" 4
 	dut_read
 	output_is "%x"
 }
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately
  2024-05-31 13:45 ` [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately Kent Gibson
@ 2024-06-03  8:52   ` Bartosz Golaszewski
  2024-06-03  8:58     ` Kent Gibson
  0 siblings, 1 reply; 18+ messages in thread
From: Bartosz Golaszewski @ 2024-06-03  8:52 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
>
> Fix shellcheck SC2155[1] - declare and assign separately to avoid
> masking return values.
>
> Signed-off-by: Kent Gibson <warthog618@gmail.com>
>
> [1] https://www.shellcheck.net/wiki/SC2155
> ---

Shouldn't the commit message say "*do* declare and assign separately"?

Bart

>  tools/gpio-tools-test.bash | 28 +++++++++++++++++-----------
>  1 file changed, 17 insertions(+), 11 deletions(-)
>
> diff --git a/tools/gpio-tools-test.bash b/tools/gpio-tools-test.bash
> index 34ea744..6bbb06c 100755
> --- a/tools/gpio-tools-test.bash
> +++ b/tools/gpio-tools-test.bash
> @@ -49,7 +49,8 @@ output_is() {
>
>  num_lines_is() {
>         [ "$1" -eq "0" ] || [ -z "$output" ] && return 0
> -       local NUM_LINES=$(echo "$output" | wc -l)
> +       local NUM_LINES
> +       NUM_LINES=$(echo "$output" | wc -l)
>         assertEquals " number of lines:" "$1" "$NUM_LINES"
>  }
>
> @@ -73,16 +74,18 @@ gpiosim_chip() {
>
>         for ARG in "$@"
>         do
> -               local KEY=$(echo $ARG | cut -d"=" -f1)
> -               local VAL=$(echo $ARG | cut -d"=" -f2)
> +               local KEY VAL
> +               KEY=$(echo "$ARG" | cut -d"=" -f1)
> +               VAL=$(echo "$ARG" | cut -d"=" -f2)
>
>                 if [ "$KEY" = "num_lines" ]
>                 then
>                         echo $VAL > $BANKPATH/num_lines
>                 elif [ "$KEY" = "line_name" ]
>                 then
> -                       local OFFSET=$(echo $VAL | cut -d":" -f1)
> -                       local LINENAME=$(echo $VAL | cut -d":" -f2)
> +                       local OFFSET LINENAME
> +                       OFFSET=$(echo "$VAL" | cut -d":" -f1)
> +                       LINENAME=$(echo "$VAL" | cut -d":" -f2)
>                         local LINEPATH=$BANKPATH/line$OFFSET
>
>                         mkdir -p $LINEPATH
> @@ -92,10 +95,11 @@ gpiosim_chip() {
>
>         echo 1 > $DEVPATH/live
>
> -       local chip_name=$(<$BANKPATH/chip_name)
> -       GPIOSIM_CHIP_NAME[$1]=$chip_name
> -       GPIOSIM_CHIP_PATH[$1]="/dev/$chip_name"
> -       GPIOSIM_DEV_NAME[$1]=$(<$DEVPATH/dev_name)
> +       local CHIP_NAME
> +       CHIP_NAME=$(<"$BANKPATH/chip_name")
> +       GPIOSIM_CHIP_NAME[$1]=$CHIP_NAME
> +       GPIOSIM_CHIP_PATH[$1]="/dev/$CHIP_NAME"
> +       GPIOSIM_DEV_NAME[$1]=$(<"$DEVPATH/dev_name")
>  }
>
>  gpiosim_chip_number() {
> @@ -3044,14 +3048,16 @@ die() {
>  # Must be done after we sources shunit2 as we need SHUNIT_VERSION to be set.
>  oneTimeSetUp() {
>         test "$SHUNIT_VERSION" = "$MIN_SHUNIT_VERSION" && return 0
> -       local FIRST=$(printf "$SHUNIT_VERSION\n$MIN_SHUNIT_VERSION\n" | sort -Vr | head -1)
> +       local FIRST
> +       FIRST=$(printf "$SHUNIT_VERSION\n$MIN_SHUNIT_VERSION\n" | sort -Vr | head -1)
>         test "$FIRST" = "$MIN_SHUNIT_VERSION" && \
>                 die "minimum shunit version required is $MIN_SHUNIT_VERSION (current version is $SHUNIT_VERSION"
>  }
>
>  check_kernel() {
>         local REQUIRED=$1
> -       local CURRENT=$(uname -r)
> +       local CURRENT
> +       CURRENT=$(uname -r)
>
>         SORTED=$(printf "$REQUIRED\n$CURRENT" | sort -V | head -n 1)
>
> --
> 2.39.2
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately
  2024-06-03  8:52   ` Bartosz Golaszewski
@ 2024-06-03  8:58     ` Kent Gibson
  2024-06-03 10:38       ` Bartosz Golaszewski
  0 siblings, 1 reply; 18+ messages in thread
From: Kent Gibson @ 2024-06-03  8:58 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio

On Mon, Jun 03, 2024 at 10:52:39AM +0200, Bartosz Golaszewski wrote:
> On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> >
> > Fix shellcheck SC2155[1] - declare and assign separately to avoid
> > masking return values.
> >
> > Signed-off-by: Kent Gibson <warthog618@gmail.com>
> >
> > [1] https://www.shellcheck.net/wiki/SC2155
> > ---
>
> Shouldn't the commit message say "*do* declare and assign separately"?
>

That is wrong, my bad.

I think I was going to change it to "don't declare and assign together"
and got distracted mid-edit.
So either that or simply "declare and assign separately".
A leading "do" would be redundant.

You ok to fix that, or would you like a re-spin?

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately
  2024-06-03  8:58     ` Kent Gibson
@ 2024-06-03 10:38       ` Bartosz Golaszewski
  2024-06-03 10:39         ` Kent Gibson
  0 siblings, 1 reply; 18+ messages in thread
From: Bartosz Golaszewski @ 2024-06-03 10:38 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Mon, Jun 3, 2024 at 10:58 AM Kent Gibson <warthog618@gmail.com> wrote:
>
> On Mon, Jun 03, 2024 at 10:52:39AM +0200, Bartosz Golaszewski wrote:
> > On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> > >
> > > Fix shellcheck SC2155[1] - declare and assign separately to avoid
> > > masking return values.
> > >
> > > Signed-off-by: Kent Gibson <warthog618@gmail.com>
> > >
> > > [1] https://www.shellcheck.net/wiki/SC2155
> > > ---
> >
> > Shouldn't the commit message say "*do* declare and assign separately"?
> >
>
> That is wrong, my bad.
>
> I think I was going to change it to "don't declare and assign together"
> and got distracted mid-edit.
> So either that or simply "declare and assign separately".
> A leading "do" would be redundant.
>
> You ok to fix that, or would you like a re-spin?
>

I'll fix it, others look good.

Bart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately
  2024-06-03 10:38       ` Bartosz Golaszewski
@ 2024-06-03 10:39         ` Kent Gibson
  0 siblings, 0 replies; 18+ messages in thread
From: Kent Gibson @ 2024-06-03 10:39 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio

On Mon, Jun 03, 2024 at 12:38:09PM +0200, Bartosz Golaszewski wrote:
> On Mon, Jun 3, 2024 at 10:58 AM Kent Gibson <warthog618@gmail.com> wrote:
> >
> > On Mon, Jun 03, 2024 at 10:52:39AM +0200, Bartosz Golaszewski wrote:
> > > On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> > > >
> > > > Fix shellcheck SC2155[1] - declare and assign separately to avoid
> > > > masking return values.
> > > >
> > > > Signed-off-by: Kent Gibson <warthog618@gmail.com>
> > > >
> > > > [1] https://www.shellcheck.net/wiki/SC2155
> > > > ---
> > >
> > > Shouldn't the commit message say "*do* declare and assign separately"?
> > >
> >
> > That is wrong, my bad.
> >
> > I think I was going to change it to "don't declare and assign together"
> > and got distracted mid-edit.
> > So either that or simply "declare and assign separately".
> > A leading "do" would be redundant.
> >
> > You ok to fix that, or would you like a re-spin?
> >
>
> I'll fix it, others look good.
>

Thanks.

Kent.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
  2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
                   ` (7 preceding siblings ...)
  2024-05-31 13:45 ` [libgpiod][PATCH 8/8] tools: tests: avoid splitting and globbing Kent Gibson
@ 2024-06-03 10:40 ` Bartosz Golaszewski
  2024-06-03 10:43   ` Kent Gibson
  8 siblings, 1 reply; 18+ messages in thread
From: Bartosz Golaszewski @ 2024-06-03 10:40 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
>
> Following up on recent discussions, this series fixes all the warnings
> detected by shellcheck.  The resulting tools test script is now clean,
> at least from the perspective of shellcheck.
>
> These fixes do not correct any known issue, other than shellcheck
> reporting them as potential problems, the intent is to remove common
> shell issues that may impact future changes, and to simplify checking
> that any subsequent changes to the test script constitute "good" shell.
>
> All the patches other than Patch 8 address a particular warning.
> They are reasonably self-explanatory, but each commit comment includes a
> link to the relevant warning(s) which describes the issue and the
> appropriate corrections.
>
> Patch 8 addresses a number of warnings, all related to word splitting
> and globbing, and those constitute the bulk of the changes.
> Some of the earlier patches also address trivial splitting/globbing
> issues where that would prevent a line being modified multiple times.
>
> Cheers,
> Kent.
>
> Kent Gibson (8):
>   tools: tests: don't mix string and array
>   tools: tests: don't declare and assign separately
>   tools: tests: fix unused variables
>   tools: tests: use read -r to avoid mangling backslashes
>   tools: tests: don't use variables in printf format string
>   tools: tests: check exit code directly
>   tools: tests: shellcheck don't follow sourced file
>   tools: tests: avoid splitting and globbing
>
>  tools/gpio-tools-test.bash | 459 +++++++++++++++++++------------------
>  1 file changed, 234 insertions(+), 225 deletions(-)
>
> --
> 2.39.2
>

Ugh, you added links after the SoB and it messes up with b4. Can you
resend it with links before any tags? Or better yet: make [x] into
Link: [x] so that b4 can interpret it correctly?

Thanks
Bart

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
  2024-06-03 10:40 ` [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Bartosz Golaszewski
@ 2024-06-03 10:43   ` Kent Gibson
  2024-06-03 10:59     ` Kent Gibson
  0 siblings, 1 reply; 18+ messages in thread
From: Kent Gibson @ 2024-06-03 10:43 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio

On Mon, Jun 03, 2024 at 12:40:37PM +0200, Bartosz Golaszewski wrote:
> On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> >
> > Following up on recent discussions, this series fixes all the warnings
> > detected by shellcheck.  The resulting tools test script is now clean,
> > at least from the perspective of shellcheck.
> >
> > These fixes do not correct any known issue, other than shellcheck
> > reporting them as potential problems, the intent is to remove common
> > shell issues that may impact future changes, and to simplify checking
> > that any subsequent changes to the test script constitute "good" shell.
> >
> > All the patches other than Patch 8 address a particular warning.
> > They are reasonably self-explanatory, but each commit comment includes a
> > link to the relevant warning(s) which describes the issue and the
> > appropriate corrections.
> >
> > Patch 8 addresses a number of warnings, all related to word splitting
> > and globbing, and those constitute the bulk of the changes.
> > Some of the earlier patches also address trivial splitting/globbing
> > issues where that would prevent a line being modified multiple times.
> >
> > Cheers,
> > Kent.
> >
> > Kent Gibson (8):
> >   tools: tests: don't mix string and array
> >   tools: tests: don't declare and assign separately
> >   tools: tests: fix unused variables
> >   tools: tests: use read -r to avoid mangling backslashes
> >   tools: tests: don't use variables in printf format string
> >   tools: tests: check exit code directly
> >   tools: tests: shellcheck don't follow sourced file
> >   tools: tests: avoid splitting and globbing
> >
> >  tools/gpio-tools-test.bash | 459 +++++++++++++++++++------------------
> >  1 file changed, 234 insertions(+), 225 deletions(-)
> >
> > --
> > 2.39.2
> >
>
> Ugh, you added links after the SoB and it messes up with b4. Can you
> resend it with links before any tags? Or better yet: make [x] into
> Link: [x] so that b4 can interpret it correctly?
>

hehe, yeah I wondered about that after I'd sent it.
I'll fix for v2.

Cheers,
Kent.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
  2024-06-03 10:43   ` Kent Gibson
@ 2024-06-03 10:59     ` Kent Gibson
  2024-06-03 11:51       ` Bartosz Golaszewski
  2024-06-03 14:59       ` Konstantin Ryabitsev
  0 siblings, 2 replies; 18+ messages in thread
From: Kent Gibson @ 2024-06-03 10:59 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio

On Mon, Jun 03, 2024 at 06:43:08PM +0800, Kent Gibson wrote:
> On Mon, Jun 03, 2024 at 12:40:37PM +0200, Bartosz Golaszewski wrote:
> > On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> > >
> > > Following up on recent discussions, this series fixes all the warnings
> > > detected by shellcheck.  The resulting tools test script is now clean,
> > > at least from the perspective of shellcheck.
> > >
> > > These fixes do not correct any known issue, other than shellcheck
> > > reporting them as potential problems, the intent is to remove common
> > > shell issues that may impact future changes, and to simplify checking
> > > that any subsequent changes to the test script constitute "good" shell.
> > >
> > > All the patches other than Patch 8 address a particular warning.
> > > They are reasonably self-explanatory, but each commit comment includes a
> > > link to the relevant warning(s) which describes the issue and the
> > > appropriate corrections.
> > >
> > > Patch 8 addresses a number of warnings, all related to word splitting
> > > and globbing, and those constitute the bulk of the changes.
> > > Some of the earlier patches also address trivial splitting/globbing
> > > issues where that would prevent a line being modified multiple times.
> > >
> > > Cheers,
> > > Kent.
> > >
> > > Kent Gibson (8):
> > >   tools: tests: don't mix string and array
> > >   tools: tests: don't declare and assign separately
> > >   tools: tests: fix unused variables
> > >   tools: tests: use read -r to avoid mangling backslashes
> > >   tools: tests: don't use variables in printf format string
> > >   tools: tests: check exit code directly
> > >   tools: tests: shellcheck don't follow sourced file
> > >   tools: tests: avoid splitting and globbing
> > >
> > >  tools/gpio-tools-test.bash | 459 +++++++++++++++++++------------------
> > >  1 file changed, 234 insertions(+), 225 deletions(-)
> > >
> > > --
> > > 2.39.2
> > >
> >
> > Ugh, you added links after the SoB and it messes up with b4. Can you
> > resend it with links before any tags? Or better yet: make [x] into
> > Link: [x] so that b4 can interpret it correctly?
> >
>
> hehe, yeah I wondered about that after I'd sent it.
> I'll fix for v2.
>

Can I confirm this is the format you want:

    Link: [1] https://www.shellcheck.net/wiki/SC2145

cos that makes checkpatch.pl unhappy.

Thanks,
Kent.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
  2024-06-03 10:59     ` Kent Gibson
@ 2024-06-03 11:51       ` Bartosz Golaszewski
  2024-06-03 14:59       ` Konstantin Ryabitsev
  1 sibling, 0 replies; 18+ messages in thread
From: Bartosz Golaszewski @ 2024-06-03 11:51 UTC (permalink / raw)
  To: Kent Gibson; +Cc: linux-gpio

On Mon, Jun 3, 2024 at 12:59 PM Kent Gibson <warthog618@gmail.com> wrote:
>
> On Mon, Jun 03, 2024 at 06:43:08PM +0800, Kent Gibson wrote:
> > On Mon, Jun 03, 2024 at 12:40:37PM +0200, Bartosz Golaszewski wrote:
> > > On Fri, May 31, 2024 at 3:45 PM Kent Gibson <warthog618@gmail.com> wrote:
> > > >
> > > > Following up on recent discussions, this series fixes all the warnings
> > > > detected by shellcheck.  The resulting tools test script is now clean,
> > > > at least from the perspective of shellcheck.
> > > >
> > > > These fixes do not correct any known issue, other than shellcheck
> > > > reporting them as potential problems, the intent is to remove common
> > > > shell issues that may impact future changes, and to simplify checking
> > > > that any subsequent changes to the test script constitute "good" shell.
> > > >
> > > > All the patches other than Patch 8 address a particular warning.
> > > > They are reasonably self-explanatory, but each commit comment includes a
> > > > link to the relevant warning(s) which describes the issue and the
> > > > appropriate corrections.
> > > >
> > > > Patch 8 addresses a number of warnings, all related to word splitting
> > > > and globbing, and those constitute the bulk of the changes.
> > > > Some of the earlier patches also address trivial splitting/globbing
> > > > issues where that would prevent a line being modified multiple times.
> > > >
> > > > Cheers,
> > > > Kent.
> > > >
> > > > Kent Gibson (8):
> > > >   tools: tests: don't mix string and array
> > > >   tools: tests: don't declare and assign separately
> > > >   tools: tests: fix unused variables
> > > >   tools: tests: use read -r to avoid mangling backslashes
> > > >   tools: tests: don't use variables in printf format string
> > > >   tools: tests: check exit code directly
> > > >   tools: tests: shellcheck don't follow sourced file
> > > >   tools: tests: avoid splitting and globbing
> > > >
> > > >  tools/gpio-tools-test.bash | 459 +++++++++++++++++++------------------
> > > >  1 file changed, 234 insertions(+), 225 deletions(-)
> > > >
> > > > --
> > > > 2.39.2
> > > >
> > >
> > > Ugh, you added links after the SoB and it messes up with b4. Can you
> > > resend it with links before any tags? Or better yet: make [x] into
> > > Link: [x] so that b4 can interpret it correctly?
> > >
> >
> > hehe, yeah I wondered about that after I'd sent it.
> > I'll fix for v2.
> >
>
> Can I confirm this is the format you want:
>
>     Link: [1] https://www.shellcheck.net/wiki/SC2145
>
> cos that makes checkpatch.pl unhappy.
>
> Thanks,
> Kent.

Ok then make it:

[1] ...
[2] ...

Signed-off-by: ...

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings
  2024-06-03 10:59     ` Kent Gibson
  2024-06-03 11:51       ` Bartosz Golaszewski
@ 2024-06-03 14:59       ` Konstantin Ryabitsev
  1 sibling, 0 replies; 18+ messages in thread
From: Konstantin Ryabitsev @ 2024-06-03 14:59 UTC (permalink / raw)
  To: Kent Gibson; +Cc: Bartosz Golaszewski, linux-gpio

On Mon, Jun 03, 2024 at 06:59:14PM GMT, Kent Gibson wrote:
> Can I confirm this is the format you want:
> 
>     Link: [1] https://www.shellcheck.net/wiki/SC2145
> 
> cos that makes checkpatch.pl unhappy.

I suggest you use:

    | Link: https://www.shellcheck.net/wiki/SC2145 # [1]

This would make most tooling happy.

-K

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-06-03 14:59 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-31 13:45 [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 1/8] tools: tests: don't mix string and array Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 2/8] tools: tests: don't declare and assign separately Kent Gibson
2024-06-03  8:52   ` Bartosz Golaszewski
2024-06-03  8:58     ` Kent Gibson
2024-06-03 10:38       ` Bartosz Golaszewski
2024-06-03 10:39         ` Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 3/8] tools: tests: fix unused variables Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 4/8] tools: tests: use read -r to avoid mangling backslashes Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 5/8] tools: tests: don't use variables in printf format string Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 6/8] tools: tests: check exit code directly Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 7/8] tools: tests: shellcheck don't follow sourced file Kent Gibson
2024-05-31 13:45 ` [libgpiod][PATCH 8/8] tools: tests: avoid splitting and globbing Kent Gibson
2024-06-03 10:40 ` [libgpiod][PATCH 0/8] tools: tests: fix shellcheck warnings Bartosz Golaszewski
2024-06-03 10:43   ` Kent Gibson
2024-06-03 10:59     ` Kent Gibson
2024-06-03 11:51       ` Bartosz Golaszewski
2024-06-03 14:59       ` Konstantin Ryabitsev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).