# [PATCH] Use printf rather than echo -n.

3 messages from 2005-12-06 to 2005-12-07. Participants: Jason Riedy, Junio C Hamano.
Thread: https://gitlist.dev/t/2761

## Jason Riedy, 2005-12-06 22:21

Subject: [PATCH] Use printf rather than echo -n.
Message-ID: <20512.1133907712@lotus.CS.Berkeley.EDU>
URL: https://gitlist.dev/e/20512.1133907712%40lotus.CS.Berkeley.EDU

```

On AIX, there is no -n option to the system's echo.  Instead,
it needs the '\c' control character.  We could replace
  echo -n "foo"
with
  echo -e "foo\c"
but printf is recommended by most man pages.  Tested on AIX
5.3, Solaris 8, and Debian.

Signed-off-by: E. Jason Riedy <ejr@cs.berkeley.edu>

---

 git-am.sh         |    2 +-
 git-applypatch.sh |    2 +-
 git-bisect.sh     |    2 +-
 git-status.sh     |    4 ++--
 4 files changed, 5 insertions(+), 5 deletions(-)

58ad3dda17daa0577fda5204f75bbc846cf7d7ea
diff --git a/git-am.sh b/git-am.sh
index 660b3a4..6ed527c 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -312,7 +312,7 @@ do
 		echo "--------------------------"
 		cat "$dotest/final-commit"
 		echo "--------------------------"
-		echo -n "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
+		printf "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all "
 		read reply
 		case "$reply" in
 		[yY]*) action=yes ;;
diff --git a/git-applypatch.sh b/git-applypatch.sh
index 4c577eb..a112e1a 100755
--- a/git-applypatch.sh
+++ b/git-applypatch.sh
@@ -83,7 +83,7 @@ while [ "$interactive" = yes ]; do
 	echo "--------------------------"
 	cat "$final"
 	echo "--------------------------"
-	echo -n "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
+	printf "Apply? [y]es/[n]o/[e]dit/[a]ccept all "
 	read reply
 	case "$reply" in
 		y|Y) interactive=no;;
diff --git a/git-bisect.sh b/git-bisect.sh
index 68838f3..05dae8a 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -67,7 +67,7 @@ bisect_start() {
 	rm -rf "$GIT_DIR/refs/bisect/"
 	mkdir "$GIT_DIR/refs/bisect"
 	{
-	    echo -n "git-bisect start"
+	    printf "git-bisect start"
 	    sq "$@"
 	} >"$GIT_DIR/BISECT_LOG"
 	sq "$@" >"$GIT_DIR/BISECT_NAMES"
diff --git a/git-status.sh b/git-status.sh
index b90ffc1..bf0e66c 100755
--- a/git-status.sh
+++ b/git-status.sh
@@ -13,7 +13,7 @@ report () {
   trailer=""
   while read status name newname
   do
-    echo -n "$header"
+    printf "$header"
     header=""
     trailer="#
 "
@@ -27,7 +27,7 @@ report () {
     U ) echo "#	unmerged: $name";;
     esac
   done
-  echo -n "$trailer"
+  printf "$trailer"
   [ "$header" ]
 }
 
-- 
0.99.9.GIT

```

## Junio C Hamano, 2005-12-07 02:04

Subject: Re: [PATCH] Use printf rather than echo -n.
Message-ID: <7vfyp5zmqe.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vfyp5zmqe.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20512.1133907712@lotus.CS.Berkeley.EDU>

```
Jason Riedy <ejr@EECS.Berkeley.EDU> writes:

> On AIX, there is no -n option to the system's echo.  Instead,
> it needs the '\c' control character.  We could replace
>   echo -n "foo"
> with
>   echo -e "foo\c"
> but printf is recommended by most man pages.  Tested on AIX
> 5.3, Solaris 8, and Debian.

Hmmmmmmmmmmmmmmmmmmmmmmmm.

Perhaps printf '%s' "$blah" to futureproof, instead of just
saying printf "$blah"?

<rant mode on>
While I do not have anything aginst system without "sane" echo,
I really do not like it.  Not your solution, but *having to do*
something like that.

metaconfig Configure does "echo $n frotz $c" with n=-n or c=\\c
set appropriately; autoconf does the same with $ac_n $ac_c.
IIRC, I think ancient autoconf did "echo | tr -d '\012'".  

These are far worse than a single printf, although they may be
more portable.

</rant mode off>

As a traditionalist, if I were doing it myself I would probably
pipe echo to tr, but I am lazy so I'd take your patch as is ;-).

```

## Jason Riedy, 2005-12-07 03:31

Subject: Re: [PATCH] Use printf rather than echo -n.
Message-ID: <21616.1133926303@lotus.CS.Berkeley.EDU>
URL: https://gitlist.dev/e/21616.1133926303%40lotus.CS.Berkeley.EDU
In-Reply-To: <7vfyp5zmqe.fsf@assigned-by-dhcp.cox.net>

```
And Junio C Hamano writes:
 - Perhaps printf '%s' "$blah" to futureproof, instead of just
 - saying printf "$blah"?

Definitely more likely to stay correct.  I'm just lazy.

 - <rant mode on>
 - While I do not have anything aginst system without "sane" echo,
 - I really do not like it.  Not your solution, but *having to do*
 - something like that.

Um, you think the wrong one is sane.  ;)  Why should echo 
in Bourne shell take C-shell arguments?  (I blame AT&T for
their crappy licensing.)

Jason

```
