вывод удара и sh отличается?

У меня есть код для печати простой таблицы умножения данного числа. Когда я выполняю его с 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" в выводе

3
задан 13 April 2017 в 15:23

1 ответ

Причем причина 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"
6
ответ дан 1 December 2019 в 15:24

Другие вопросы по тегам:

Похожие вопросы: