threads / patch / 2761

patchUse printf rather than echo -n.

Subject: [PATCH] Use printf rather than echo -n.

## tl;dr

3 messages between Dec 6, 2005 and Dec 7, 2005. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Jason Riedy· Dec 6, 2005, 22:21 UTC · lore
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
Show changes to 4 files +5 −5

git-am.sh, git-applypatch.sh, git-bisect.sh, git-status.sh

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· Dec 7, 2005, 02:04 UTC · re: Jason Riedy · lore

Re: [PATCH] Use printf rather than echo -n.

Jason Riedy <ejr@EECS.Berkeley.EDU> writes:
Show 7 quoted lines
> 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· Dec 7, 2005, 03:31 UTC · re: Junio C Hamano · lore

Re: [PATCH] Use printf rather than echo -n.

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

← back to recent threads