У меня есть код для печати простой таблицы умножения данного числа. Когда я выполняю его с sh, это дает мне идеальный вывод, но когда я использую удар, это дает немного отличающийся вывод. Можно ли объяснить, почему это?
Вот вывод с 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" в выводе
Причем причина bash
встроенный echo
(и также внешнее /bin/echo
) по умолчанию не понимает Escape обратной косой черты (\
), следовательно \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 оболочек использовать printf
:
printf '\t%s * %s =%s\n' "$num" "$i" "$s"