bash 和 sh 的输出不同吗?

bash 和 sh 的输出不同吗?

我有一段代码可以打印给定数字的简单乘法表。当我使用 sh 运行它时,它给出了完美的输出,但是当我使用 bash 时,它给出了略有不同的输出。你能解释一下这是为什么吗?

以下是输出sh

sh cd.sh 

enter the no to print table
12

12 * 1 =12
12 * 2 =24
12 * 3 =36
12 * 4 =48
12 * 5 =60
12 * 6 =72
12 * 7 =84
12 * 8 =96
12 * 9 =108
12 * 10 =120

COntinue.. or not [0/1] 
1

exiting the script

bash

bash cd.sh 

enter the no to print table
12

\t12 * 1 =12
\t12 * 2 =24
\t12 * 3 =36
\t12 * 4 =48
\t12 * 5 =60
\t12 * 6 =72
\t12 * 7 =84
\t12 * 8 =96
\t12 * 9 =108
\t12 * 10 =120

COntinue.. or not [0/1] 
1

exiting the script

这是我的代码。我已经纠正了所有错误,所以如果遇到任何错误,请忽略!只需关注输出中的“\t”

答案1

原因是bash内置的echo(以及外部的/bin/echo)默认情况下不理解反斜杠转义符(\),因此\t按字面意思处理(而不是制表符)。

您需要使用内置的-e选项。bashecho

help echo

-e     enable interpretation of backslash escapes

因此在bash(或使用/bin/echo)中您需要:

echo -e "\t$num * $i =$s"

另一方面,内置sh的 ( dash)echo默认解释\t为制表符,因此在 的情况下您会得到制表符sh


为了使其可在所有兼容 POSIX 的 shell 之间移植,请使用printf

printf '\t%s * %s =%s\n' "$num" "$i" "$s"

相关内容