echo -e在终端中工作但不在bash脚本中工作

时间:2012-04-22 12:16:31

标签: bash shell

我开发并维护了一个名为Githug的ruby gem,我正在尝试为它编写一个自动化测试脚本。 Githug基本上操作一个目录,将它放入一个工作git存储库的不同状态,你可以执行git命令来“解决”这个级别。

其中一个级别会询问您的git配置详细信息,我正在执行以下操作:

#! /bin/sh
# ...snip
#level 4
FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug

当我从bash脚本执行时,它(echo -e)不起作用。但是当我从终端运行时它就会这样做。

FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug
********************************************************************************
*                                    Githug                                    *
********************************************************************************
What is your name? What is your email?
Congratulations, you have solved the level

为什么这不能用于bash脚本?

感谢。

2 个答案:

答案 0 :(得分:14)

错误的shebang:

#! /bin/sh

如果它是bash脚本,请使用

#! /bin/bash

Bash有一个内置回声,与/ bin / echo不是100%同意。

答案 1 :(得分:0)

如评论所述,printfpreferred option,如Git 2.14.x / 2.15(2017年第4季度)所示

printf '%s\n%s' "$FULL_NAME" "$EMAIL"

commit 1a6d468Torsten Bögershausen (tboegi)(2017年9月17日) Torsten Bögershausen -- tboegi --合并于commit 1a6d468,2017年9月21日)

  

test-lintecho -e(或-E)不可移植

     

echo的某些实现支持' -e'启用选项   以下字符串的反斜杠解释。
  另外,他们支持-E'把它关掉。

     

然而,这些都不是便携式的,POSIX甚至没有提到它们,   许多实施都不支持它们。

     

检查' -n'已在check-non-portable-shell.pl中完成,   将其扩展为涵盖' -n',' -e'或' -E'。