https://git.savannah.gnu.org/cgit/patch.git/commit/?id=f6bc5b14bd193859851d15a049bafb1007acd288
https://git.savannah.gnu.org/cgit/patch.git/commit/?id=074e2395f81d0ecaa66b71a6c228c70b49db72e5
https://git.savannah.gnu.org/cgit/patch.git/commit/?id=7623b2dc0d1837ecfd58f32efc78e35834deeb38

--- a/tests/crlf-handling
+++ b/tests/crlf-handling
@@ -14,7 +14,7 @@ use_local_patch
 use_tmpdir
 
 lf2crlf() {
-    while read l; do echo -e "$l\r"; done
+    while read l; do printf "%s\r\n" "$l"; done
 }
 
 echo 1 > a
--- a/tests/git-cleanup
+++ b/tests/git-cleanup
@@ -36,8 +36,8 @@ BAD PATCH
 EOF
 
 echo 1 > f
-echo -n '' > g
-echo -n '' > h
+printf '' > g
+printf '' > h
 
 check 'patch -f -i 1.diff || echo status: $?' <<EOF
 patching file f
--- a/tests/merge
+++ b/tests/merge
@@ -30,30 +30,28 @@ x2() {
     while test $# -gt 0 && test "$1" != -- ; do
 	echo "$1"
 	shift
-    done > a.sed
-    echo "$body" | sed -f a.sed > b
+    done > b.sed
+    echo "$body" | sed -f b.sed > b
     shift
     while test $# -gt 0 ; do
 	echo "$1"
 	shift
-    done > b.sed
-    echo "$body" | sed -f b.sed > c
-    rm -f a.sed b.sed
+    done > c.sed
+    echo "$body" | sed -f c.sed > c
+    rm -f b.sed c.sed
     output=`diff -u a b | patch $ARGS -f c`
     status=$?
     echo "$output" | sed -e '/^$/d' -e '/^patching file c$/d'
     cat c
-    test $status == 0 || echo "Status: $status"
+    test $status = 0 || echo "Status: $status"
 }
 
 x() {
-    ARGS="$ARGS --merge" x2 "$@"
+    ARGS="--merge" x2 "$@"
     echo
-    ARGS="$ARGS --merge=diff3" x2 "$@"
+    ARGS="--merge=diff3" x2 "$@"
 }
 
-unset ARGS
-
 # ==============================================================
 
 check 'x 3' <<EOF
--- a/tests/test-lib.sh
+++ b/tests/test-lib.sh
@@ -41,7 +41,7 @@ use_local_patch() {
 
     eval 'patch() {
 	if test -n "$GDB" ; then
-	  echo -e "\n" >&3
+	  printf "\n\n" >&3
 	  gdbserver localhost:53153 $PATCH "$@" 2>&3
 	else
           $PATCH "$@"
@@ -113,22 +113,15 @@ cleanup() {
     exit $status
 }
 
-if test -z "`echo -n`"; then
-    if eval 'test -n "${BASH_LINENO[0]}" 2>/dev/null'; then
-	eval '
-	    _start_test() {
-		echo -n "[${BASH_LINENO[2]}] $* -- "
-	    }'
-    else
-	eval '
-	    _start_test() {
-		echo -n "* $* -- "
-	    }'
-    fi
+if eval 'test -n "${BASH_LINENO[0]}" 2>/dev/null'; then
+    eval '
+	_start_test() {
+	    printf "[${BASH_LINENO[2]}] %s -- " "$*"
+	}'
 else
     eval '
 	_start_test() {
-	    echo "* $*"
+	    printf "* %s -- " "$*"
 	}'
 fi
 
--- a/tests/merge
+++ b/tests/merge
@@ -32,7 +32,7 @@ x2() {
 	shift
     done > b.sed
     echo "$body" | sed -f b.sed > b
-    shift
+    test $# -eq 0 || shift
     while test $# -gt 0 ; do
 	echo "$1"
 	shift
 
--- a/tests/test-lib.sh
+++ b/tests/test-lib.sh
@@ -113,7 +113,7 @@ cleanup() {
     exit $status
 }
 
-if eval 'test -n "${BASH_LINENO[0]}" 2>/dev/null'; then
+if ( eval 'test -n "${BASH_LINENO[0]}"' 2>/dev/null ); then
     eval '
 	_start_test() {
 	    printf "[${BASH_LINENO[2]}] %s -- " "$*"