我有一段代码可以打印给定数字的简单乘法表。当我使用 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
选项。bash
echo
从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"